发表于: 2019-11-13 23:43:18

1 1192


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin) 

1.实现md5加密

加盐:

盐(Salt)在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。

不明白?

详见:https://cloud.tencent.com/developer/article/1342756


2.md5加密

  private static String md5Hex(String str){
try {
//            获取md5实例
           MessageDigest md = MessageDigest.getInstance("MD5");
//            md5加密后返回字节数组
           byte[] digest = md.digest(str.getBytes());
//            通过Hex()类实现16进制字符串和字节数组的转换
           return new String(new Hex().encode(digest));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}

DigestUtils.md5Hex

方法可可替代上述代码

password = DigestUtils.md5Hex(password+salt);


2.2盐?在哪?

盐的要求是16位字符串 ,采用随机数方式

Random random = new Random();
StringBuilder stringBuilder = new StringBuilder(16);
stringBuilder.append(random.nextInt(99999999)).append(random.nextInt(99999999));
System.out.println(stringBuilder);
int len = stringBuilder.length();
if(len<16){
for (int i=0;i<16-len;i++){
stringBuilder.append(0);
}
}
String salt = stringBuilder.toString();


2.3 有了盐(16位),加了密(32位),将盐和密整合

char[] chars = new char[48];
for(int i=0;i<48;i++){
chars[i] = password.charAt(i/3*2);
char c = salt.charAt(i/3);
chars[i++] = c;
chars[i++] = password.charAt(i/3*2+1);
}
List<String> list = new ArrayList<>();
list.add(salt);
list.add(new String(chars));
return list;


3.最终加密后的结果如何验证

用password + salt 看看和数据库中是否相等即可


public static Boolean verifyMD5(String password,String md5Str){
char[] cs1 = new char[32];
char[] cs2 = new char[16];
for(int i=0;i<48;i+=3){
cs1[i/3*2] = md5Str.charAt(i);
cs1[i/3*2+1] = md5Str.charAt(i+2);
cs2[i/3] = md5Str.charAt(i+1);
}
String salt = new String(cs2);
return DigestUtils.md5Hex(password+salt).equals(String.valueOf(cs1));
}


4.测试结果

public static void main(String[] args) {
String passSalt = passwordTest("a","1111222233334444");
System.out.println(passSalt);
System.out.println(md5Hex("a1111222233334444"));
System.out.println(verifyMD5("a","a13514616314e23e2d32222af32033f3373be49d4ea46644"));
}

可以正常加盐加密,也可以验证加密结果





明天计划的事情:

JWT
遇到的问题:


收获:

1.这个日报系统图片没法粘贴进来不是太多就是登录失效!!!!


返回列表 返回列表
评论

    分享到