SHA-512不受Java支持?
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
错误SHA-512不受Java支持?
我想说最可能的解释是你的REAL代码有"SHA_512"
而不是"SHA-512"
。当然,这可以解释为什么异常消息中有下划线。
另一种可能性是,由于美国的出口限制,您的JVM的“军事强度”加密算法被删除。但是,我认为这是件不可思议的事......
(事实上,我的阅读this是,SHA-512被列入默认的“SUN”提供者的所有版本反正。)
缺省情况下,JDK中未包含AES-256 - 读取https:// knowledge.safe.com/articles/395/enabling-aes256-in-the-java-runtime-environment-fo.html。 – Xdg 2016-01-19 13:01:17
MessageDigest类是设计成提供加密的安全消息的 功能的引擎类消化如 SHA-1或MD5。一个加密安全的消息摘要需要任意大小的输入(一个字节数组),并生成一个固定大小的输出 。
打印所有MessageDigest
提供商 -
Provider provider[] = Security.getProviders();
for (Provider pro : provider) {
System.out.println(pro);
for (Enumeration e = pro.keys(); e.hasMoreElements();)
System.out.println("\t" + e.nextElement());
}
而且fortunatly SHA-512
是有,但SHA_512
不是。 :)
由Java MessageDigest
提供standard hashing algorithms以下:
- MD2
- MD5
- SHA-1
- SHA-256
- SHA-384
- SHA -512
您可能想要验证您提供给工厂方法的名称。
Java支持SHA3吗? – user236501 2013-02-17 05:02:56
别管我以前的评论。默认情况下,Java不附带SHA3 MessageDigest提供程序。但它看起来像[BouncyCastle](http://www.bouncycastle.org/releasenotes.html)已将其纳入其图书馆。 – Perception 2013-02-17 05:09:23
请注意,SHA-384实现通过截断SHA-512的结果来工作,因此它需要与SHA-512相同的计算量。 – Corne 2015-09-11 21:03:19
这里是样品方法,该方法可用于通过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
在Groovy语言中,您可以使用下面的方法通过SHA-512生成散列字符串。
它完全为我工作。
public String getHashCodeFromString(String algorithm, String str) throws NoSuchAlgorithmException{
MessageDigest md = MessageDigest.getInstance(algorithm);
md.update(str.getBytes());
def byteData = md.digest() as byte[];
//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();
}
http://mustafacanturk.com/sha512-hashing-on-java/ – 2013-02-17 04:42:09
异常消息不代码匹配:'SHA_512' VS在'SHA-512'的代码正确的值。 – laz 2013-02-17 04:45:09
对不起我的错误谢谢 – user236501 2013-02-17 04:55:06