常见的加密方式
1、可逆加密算法
解釋: 加密后, 密文可以反向解密得到密碼原文
- 對稱加密
【文件加密和解密使用相同的密鑰,即加密密鑰也可以用作解密密鑰】
解釋: 在對稱加密算法中,數據發信方將明文和加密密鑰一起經過特殊的加密算法處理后,使其變成復雜的加密密文發送出去,收信方收到密文后,若想解讀出原文,則需要使用加密時用的密鑰以及相同加密算法的逆算法對密文進行解密,才能使其回復成可讀明文。在對稱加密算法中,使用的密鑰只有一個,收發雙方都使用這個密鑰,這就需要解密方事先知道加密密鑰。
優點: 對稱加密算法的優點是算法公開、計算量小、加密速度快、加密效率高。
缺點: 沒有非對稱加密安全.
用途: 一般用于保存用戶手機號、身份證等敏感但能解密的信息。
常見的對稱加密算法有: AES、DES、3DES、Blowfish、IDEA、RC4、RC5、RC6、HS256
- 非對稱加密
【兩個密鑰:公開密鑰(publickey)和私有密鑰,公有密鑰加密,私有密鑰解密】
**解釋: ** 同時生成兩把密鑰:私鑰和公鑰,私鑰隱秘保存,公鑰可以下發給信任客戶端.
加密與解密:
? 私鑰加密,持有公鑰才可以解密
? 公鑰加密,持有私鑰才可解密
簽名:
私鑰簽名, 持有公鑰進行驗證是否被篡改過.
**優點: ** 非對稱加密與對稱加密相比,其安全性更好;
缺點: 非對稱加密的缺點是加密和解密花費時間長、速度慢,只適合對少量數據進行加密。
用途: 一般用于簽名和認證。私鑰服務器保存, 用來加密, 公鑰客戶拿著用于對于令牌或者簽名的解密或者校驗使用.
常見的非對稱加密算法有: RSA、DSA(數字簽名用)、ECC(移動設備用)、RS256 (采用SHA-256 的 RSA 簽名)
2、不可逆加密算法
解釋: 一旦加密就不能反向解密得到密碼原文.
種類: Hash加密算法, 散列算法, 摘要算法等
用途:一般用于效驗下載文件正確性,一般在網站上下載文件都能見到;存儲用戶敏感信息,如密碼、 卡號等不可解密的信息。
常見的不可逆加密算法有: MD5、SHA、HMAC
3、Base64編碼
ase64是網絡上最常見的用于傳輸8Bit字節代碼的編碼方式之一。Base64編碼可用于在HTTP環境下傳遞較長的標識信息。采用Base64Base64編碼解碼具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。注意:Base64只是一種編碼方式,不算加密方法。
在線編碼工具:
http://www.jsons.cn/img2base64/
4、密碼加密的方式選型
4.1 MD5密碼加密
//md5加密 DegestUtils:spring框架提供的工具類
String md5Str = DigestUtils.md5DigestAsHex(“abc”.getBytes());
System.out.println(md5Str);//900150983cd24fb0d6963f7d28e17f72
md5相同的密碼每次加密都一樣,不太安全
4.2 手動加密(md5+隨機字符串)
這樣同樣的密碼,加密多次值是不相同的,因為加入了隨機字符串
//uername:zhangsan  password:123   salt:隨時字符串
String salt = RandomStringUtils.randomAlphanumeric(10);//獲取一個10位的隨機字符串
System.out.println(salt);
String pswd = "123"+salt;String saltPswd = DigestUtils.md5DigestAsHex(pswd.getBytes());
System.out.println(saltPswd);
4.3 手動加密(md5+隨機字符串)
? 在用戶模塊,對于用戶密碼的保護,通常都會進行加密。我們通常對密碼進行加密,然后存放在數據庫中,在用戶進行登錄的時候,將其輸入的密碼進行加密然后與數據庫中存放的密文進行比較,以驗證用戶密碼是否正確。 目前,MD5和BCrypt比較流行。相對來說,BCrypt比MD5更安全。
String gensalt = BCrypt.gensalt();//這個是鹽  29個字符,隨機生成
System.out.println(gensalt);
String password = BCrypt.hashpw("123456", gensalt);  //根據鹽對密碼進行加密
System.out.println(password);//加密后的字符串前29位就是鹽boolean checkpw = BCrypt.checkpw("123456",     "$2a$10$61ogZY7EXsMDWeVGQpDq3OBF1.phaUu7.xrwLyWFTOu8woE08zMIW");
System.out.println(checkpw);
總結
 
                            
                        - 上一篇: 买了5g手机后4g卡能用吗
- 下一篇: 在Spring Rest模板中跳过SSL
