MD5密码加盐加密
密码加盐的意义
防止字典破解和暴力破解的破解方式来破解。如果知道了数据库中密码的哈希值,用查表法,逆向查表法、彩虹表等。当知道某个密码的哈希值时,只需要在建立好的表中查找该值,你就知道对应的密码,盐就是一个随机生成的字符串。我们将盐与原始密码连接(concat)在一起(放在前面或后面都可以),然后将concat后的字符串加密。采用这种方式加密密码,查表法就不灵了(因为盐是随机生成)。
密码加盐加密的实现方法
密码:字符串password(用户输入)
盐值:salt(随机生成),每次加盐加密都要把盐值给存起来,下次用户登录的时候就要获取盐值,和数据库里面已经加密好的字符串进行匹配。
随机生成盐值的方法
//length用户要求,随机产生字符串的长度
public static String getRandomString(int length){
String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random=new Random();
StringBuffer sb=new StringBuffer();
for(int i=0;i<length;i++){
int number=random.nextInt(62);
sb.append(str.charAt(number));
}
return sb.toString();
}
注:可以把盐加在密码前面,也可以把盐加在密码后面,同时也可以加在中间,如果还嫌不够安全,也可以加多个盐值,也就是多重加盐,会更安全更保险。