【发布时间】:2017-03-16 20:53:14
【问题描述】:
谁能告诉我为什么下面的代码并不总是返回相同的哈希值? AFAIK 哈希可能不同的唯一方法是由于随机盐,但根据文档,我通过将盐大小设置为 0 来禁用盐。
public static void main(String[] args ) {
char[] password = "test_pass".toCharArray();
String str = encodePassword(password);
System.out.printf(
"Byte digest '%s'\n",
String.valueOf(Hex.encodeHex(Base64.decodeBase64(str)))
);
}
static StandardByteDigester digester = new StandardByteDigester();
{
digester.setAlgorithm("SHA-256");
digester.setIterations(100000);
digester.setSaltSizeBytes(0);
digester.initialize();
}
public static String encodePassword(char[] rawPass) {
return new String(Base64.encodeBase64(digester.digest(toBytes(rawPass))));
}
public static byte[] toBytes(char[] ch) {
Charset charset = Charset.defaultCharset();
ByteBuffer buff = charset.encode(CharBuffer.wrap(ch));
byte[] tmp = new byte[buff.limit()];
buff.get(tmp);
return tmp;
}
【问题讨论】:
-
您使用的是哪个版本的 jasypt?
标签: java encryption sha256 sha jasypt