try {
MessageDigest digest = MessageDigest.getInstance("SHA-512");
byte[] output = digest.digest(password);
digest.update(salt);
digest.update(output);
return new BigInteger(1, digest.digest());
} catch (NoSuchAlgorithmException e) {
throw new UnsupportedOperationException(e);
}但是我得到了Exception in thread "main" java.security.NoSuchAlgorithmException: SHA_512 MessageDigest not available错误
发布于 2013-02-17 12:52:38
我想说,最可能的解释是,您的实际代码使用的是"SHA_512"而不是"SHA-512"。当然,这可以解释为什么异常消息中会有下划线。
另一种可能性是,由于美国的出口限制,您有一个删除了“军事强度”加密算法的JVM。然而,我认为这是不太可能的。
(事实上,我对this的理解是,SHA-512无论如何都包含在默认的“太阳”提供程序的所有版本中。)
发布于 2013-02-17 12:50:00
下面是Java MessageDigest提供的standard hashing algorithms
您可能需要验证提供给工厂方法的名称。
发布于 2015-10-16 22:42:40
下面是通过SHA-512获取哈希串的示例方法:
private static String getHashCodeFromString(String algorithm, String str) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance(algorithm);
md.update(str.getBytes());
byte byteData[] = md.digest();
//convert the byte to hex format method 1
StringBuffer hashCodeBuffer = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
hashCodeBuffer.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
return hashCodeBuffer.toString();
}使用SHA-512作为算法。转到下面的链接,获取其他可能的算法名称,您可以在方法中传递。https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#MessageDigest
https://stackoverflow.com/questions/14918020
复制相似问题