美文网首页
深入理解加密解密

深入理解加密解密

作者: 善思者_tin | 来源:发表于2020-02-19 22:11 被阅读0次

    一、概述

    在开发项目中我们必然会涉及到加密解密,我们常需要用到加解密算法,加解密算法主要分为三大类:

    1、对称加密算法,如:AESDES3DES

    2、非对称加密算法,如:RSADSAECC

    3、散列算法,如:MD5SHA1HMAC

    接下来对它们各自的算法和在项目中的应用进行具体分析。

    二、各算法对比

    对称加密算法(加解密密钥相同)

    非对称算法(加密密钥和解密密钥不同)

    散列算法比较

    对称与非对称算法比较

    注:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数

    三、项目中常用总结

    对称加密: DES(56位),

    非对称加密: ECC(160位)或RSA(1024),

    消息摘要: MD5

    数字签名:DSA

    其中,AES和MD5最为常用,

    四、应用案例

    4.1、DES应用之用户ID加解密

    背景介绍

    有时候我们不希望直接把ID暴露给用户,因为有规则的ID,容易泄露信息,同时有可能被第三方直接遍历抓取资源。为了防止数据库条目 ID 直接暴露给用户,需要对ID进行按照自己的规则加密

    加解密核心代码

    加密:

    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

    SecretKey securekey = keyFactory.generateSecret(dks);

    cipher = Cipher.getInstance(desMode);

    cipher.init(Cipher.ENCRYPT_MODE, securekey, spec);

    解密:

    dks =new DESKeySpec(key);

    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

    SecretKey securekey = keyFactory.generateSecret(dks);

    cipher = Cipher.getInstance(desMode);

    cipher.init(Cipher.DECRYPT_MODE, securekey, spec);

    4.2、RSA之密码明文传输

    背景介绍:

    当用户设置或者更改密码时,通过输入的密码在页面的表单数据中显示为明文,这样可能会窃取,产生安全风险。因此需要采用一定的规则对其进行密文显示。

    RSA和核心代码

    前端:引入jsencrypt.jsp进行加密运算。

    后端:通过RSAUtils里面的解密方法进行解密。

    4.3、MD5之签名加密

    背景介绍

    系统从外部获取数据时,通常采用API接口调用的方式来实现。请求方和接口提供方之间的通信过程,有这几个问题需要考虑:

    1)、请求参数是否被篡改;

    2)、请求来源是否合法;

    3)、请求是否具有唯一性。

    为了保证请求来源的合法性,需要求调用方按照约定好的算法生成签名字符串,作为请求的一部分,接口提供方验算签名即可知是否合法。

    MD5签名加密核心代码

    public static String getEncryptionUtf8(String originString)

    throws UnsupportedEncodingException {

    String result ="";

    if (originString !=null) {

    try {

    // 指定加密的方式为MD5

     MessageDigest md = MessageDigest.getInstance("MD5");

    md.update((originString).getBytes("UTF-8"));

    byte b[] = md.digest();

    // 进行加密运算

                int i;

    StringBuffer buf =new StringBuffer("");

    for(int offset=0; offset

    i = b[offset];

    if(i<0){

    i+=256;

    }

    if(i<16){

    buf.append("0");

    }

    buf.append(Integer.toHexString(i));

    }

    result = buf.toString();

    }catch (NoSuchAlgorithmException e) {

    //e.printStackTrace();

            }

    }

    return result;

    }

    相关文章

      网友评论

          本文标题:深入理解加密解密

          本文链接:https://www.haomeiwen.com/subject/swfnfhtx.html