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())