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())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章