Sha256Hash+salt 密码加密使用

1 、常见加密算法

对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES

非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

Hash算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1(是一种不可逆的算法
在线hash计算地址

2、 SHA-256:

对于任意长度的消息,SHA256都会产生一个256位的哈希值,称作消息摘要。这个摘要相当于是个长度为32个字节的数组,通常有一个长度为64的十六进制字符串来表示,其中1个字节=8位,一个十六进制的字符的长度为4位。

  System.out.println(DigestUtils.sha256Hex("123456"));
  System.out.println(new Sha256Hash("123456"));
 // 输出
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92

3、加盐

散列算法一般用于生成数据的摘要信息,是一种不可逆的算法,一般适合存储密码之类的数据,常见的散列算法如MD5、SHA等。
一般进行散列时最好提供一个salt(盐),比如加密密码“admin”,产生的散列值是“21232f297a57a5a743894a0e4a801fc3”,可以到一些md5解密网站很容易的通过散列值得到密码“admin”,即如果直接对密码进行散列相对来说破解更容易,此时我们可以加一些只有系统知道的干扰数据,如用户名和ID(即盐);这样散列的对象是“密码+用户名+ID”,这样生成的散列值相对来说更难破解

String md5 = new Md5Hash(str, salt).toString();//还可以转换为 toBase64()/toHex()   
String sha1 = new Sha256Hash(str, salt).toString();  

// 保存密码
 String salt = RandomStringUtils.randomAlphanumeric(20);
 user.setPassword(new Sha256Hash(newPassword, salt).toHex());
 user.setSalt(salt);
 // 验证密码
 user.getPassword().equals(new Sha256Hash(form.getPassword(), user.getSalt()).toHex())

你可能感兴趣的:(信息安全)