我尝试调用下面提到的.Select(x => (int) x)
函数 -
hash(String plainText)
并收到此错误 -
import java.security.MessageDigest;
import java.lang.Exception;
import java.util.Base64;
public class MyHash {
private MessageDigest messageDigest = null;
private String algo = "SHA3-384";
public String hash(String plainText)
{
byte[] hashBytes = null;
try
{
messageDigest = MessageDigest.getInstance(algo);
messageDigest.update( plainText.getBytes() );
hashBytes = messageDigest.digest();
}
catch(Exception e)
{
e.printStackTrace();
}
return Base64.getEncoder().encodeToString(hashBytes);
}
}
此外,java.security.NoSuchAlgorithmException: SHA3-384 MessageDigest not available
at sun.security.jca.GetInstance.getInstance(java.base@9-internal/GetInstance.java:159)
at java.security.Security.getImpl(java.base@9-internal/Security.java:695)
at java.security.MessageDigest.getInstance(java.base@9-internal/MessageDigest.java:174)
at MyHash.hash(MyHash.java:16)
at Main.main(Main.java:36)
-
java -version
不知道为什么我收到此错误。任何帮助将不胜感激。
修改1:
这些是支持的算法 -
openjdk version "9-internal"
OpenJDK Runtime Environment (build 9-internal+0-2016-04-14-195246.buildd.src)
OpenJDK 64-Bit Server VM (build 9-internal+0-2016-04-14-195246.buildd.src, mixed mode)
编辑2:
Oracle JDK 9.0.1
没有错误答案 0 :(得分:2)
OpenJdk 9也应按照以下链接实现。
JEP 287: SHA-3 Hash Algorithms
尝试在您的环境中运行以下代码,看看支持所有算法。
public static void main(String[] args) {
for (Provider provider : Security.getProviders()) {
System.out.println("Provider: " + provider.getName());
for (Provider.Service service : provider.getServices()) {
System.out.println(" Algorithm: " + service.getAlgorithm());
}
}
}
不确定,但我认为您提供的链接指向Oracle的JDK,而您使用的是openjdk。
答案 1 :(得分:1)
Oracle JDK在JDK9中开始支持来自https://bugs.openjdk.java.net/browse/JDK-8000415的SHA3-384算法。 JDK9将有此修复。
答案 2 :(得分:0)
我已将JDK更新为Oracle的JDK 9.0.1,并且可以使用<=>
而没有任何错误。
更新后输出SHA3-384
-
java -version