计算机系统应用教程网站

网站首页 > 技术文章 正文

代码这样写是不安全的(3):不要再使用MD5

btikc 2024-09-18 08:42:30 技术文章 35 ℃ 0 评论

MD5消息摘要算法是一个广泛使用的加密Hash函数,被广泛应用于密码存储、消息和数据的完整性验证。

然而,MD5算法被证明不安全已超过十年了,自从王小云破解MD5算法后,国内外对MD5碰撞的相关研究与恶意利用从未停止,可在网上搜索《MD5碰撞的演化之路》详细了解。

虽然大部分公司已经抛弃了MD5,但是还是有不少公司在使用这种过时的算法。

不安全的代码示例(JAVA)

MessageDigest md5Digest = MessageDigest.getInstance("MD5");

md5Digest.update(password.getBytes());
byte[] hashValue = md5Digest.digest();
byte[] hashValue = DigestUtils.getMd5Digest().digest(password.getBytes());

代码这样写才安全(JAVA)

使用bouncy castle:

public static byte[] getEncryptedPassword(String password, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException {
PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator(new SHA256Digest());
gen.init(password.getBytes("UTF-8"), salt.getBytes(), 4096);
return ((KeyParameter) gen.generateDerivedParameters(256)).getKey();
}

Java 8 及以上:

public static byte[] getEncryptedPassword(String password, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException {
KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 4096, 256 * 8);
SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
return f.generateSecret(spec).getEncoded();
}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表