我对org.apache.commons.codec.digest.Md5Cryp的正确用法有疑问。
在罐子里你可以找到方法
public static String md5Crypt(final byte[] keyBytes)
会在内部生成随机盐,然后返回加密的字符串。
但是我不知道此功能应该有什么好处,因为在不知不觉中,我将永远无法再次检索相同的加密字符串。
另一方面,该库不提供类似getRandomSalt()的方法。
有人可以指出应该如何使用该库吗?
最佳答案
要验证使用md5Crypt
加密的值,请使用md5Crypt(byte[], String)
方法,其中String是您已经拥有的加密值,然后比较两个加密的Strings是否相同。
String somevalue = "somevalue";
String encrypted1 = Md5Crypt.md5Crypt(somevalue.getBytes());
String encrypted2 = Md5Crypt.md5Crypt(somevalue.getBytes(), encrypted1);
String encrypted3 = Md5Crypt.md5Crypt(somevalue.getBytes());
System.out.println("encrypted1==encrypted2: " + encrypted1.equals(encrypted2));
System.out.println("encrypted1==encrypted3: " + encrypted1.equals(encrypted3));
Output:
encrypted1==encrypted2: true
encrypted1==encrypted3: false
在内部md5Crypt从传递给
md5Crypt(byte[], String)
方法的加密String中提取盐值。另外,我不知道您的用例是什么,但是如果这是用于存储任何类型的凭据,我建议您使用Apache commons
SHA512
类(或更好的是,Sha2Crypt
)中包含的PBKDF2
或bCrypt
。 MD5是一种相当快速的哈希算法,并非设计用于哈希密码。它的速度使其可以很好地用于文件完整性验证之类的事情,但是对于密码哈希(即使有问题)也不利。