MD5加盐

MD5加密算法的使用 (及加盐操作)

/**
 * @Des 得到相应的一个MD5加密后的字符串
 * @param psd
 * @param salt
 * @return    MD5加密后的字符串
 */
public static String encoder(String psd, String salt) {
    try {
        StringBuffer stingBuffer = new StringBuffer();
        // 1.指定加密算法
        MessageDigest digest = MessageDigest.getInstance("MD5");
        // 2.将需要加密的字符串转化成byte类型的数据,然后进行哈希过程
        byte[] bs = digest.digest((psd + salt).getBytes());
        // 3.遍历bs,让其生成32位字符串,固定写法

        // 4.拼接字符串
        for (byte b : bs) {
            int i = b & 0xff;
            String hexString = Integer.toHexString(i);
            if (hexString.length() < 2) {
                hexString = "0" + hexString;
            }
            stingBuffer.append(hexString);
        }
        return stingBuffer.toString();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return null;
}

注意:

这种方式加密其实是使用的:md5($pass.$salt):盐值字符串加在密码字符串后面

在使用shiro框架登录验证使用md5加盐加密是:md5($salt.$pass):盐值字符串加在密码字符串前面

例如:


用介绍的这种写法写加密的结果为:b5f09dedae0dbf39078979264a7cd2cd

1)

而使用shiro框架登录验证加密的结果为:9f9c3ec0287e769e48482b1d29dd4e23

2)

所以在使用shiro框架设置密码,对密码进行加密的时候,使用:

String password = new SimpleHash("MD5","111111","XXXXXX").toString();,new SImpleHash使用的是将盐值字符串加在密码字符串前面,即md5($salt.$pass)

当然如果对该段代码中的

byte[] bs = digest.digest((psd + salt).getBytes());psd与salt的位置交换,加密的结果就为md5($salt.$pass)这种格式

md5($pass.$salt)与md5($salt.$pass)其实本质上只是盐值字符串加在密码字符串后或前

猜你喜欢

转载自blog.csdn.net/qq_39986274/article/details/80162237