Java 调用MessageDigest.getInstance(“SHA256”)时发生异常
我有在Android上运行良好的代码。当我用JRE 1.6将它移植到我的Windows 64位机器上时,代码不起作用 当我运行以下代码行时:Java 调用MessageDigest.getInstance(“SHA256”)时发生异常,java,cryptography,sha256,Java,Cryptography,Sha256,我有在Android上运行良好的代码。当我用JRE 1.6将它移植到我的Windows 64位机器上时,代码不起作用 当我运行以下代码行时: final MessageDigest digest = MessageDigest.getInstance("SHA256") 我得到以下例外情况: java.security.nosuchagorithmexception:SHA256 MessageDigest在sun.security.jca.GetInstance.GetInstance上不可
final MessageDigest digest = MessageDigest.getInstance("SHA256")
我得到以下例外情况:
java.security.nosuchagorithmexception:SHA256 MessageDigest在sun.security.jca.GetInstance.GetInstance上不可用(未知源)
位于java.security.security.getImpl(未知源代码)
java.security.MessageDigest.getInstance(未知源)
我在网上发现有人声称可以将SHA256与Sun JRE附带的标准加密提供程序一起使用,有人说我需要使用另一个提供程序,例如Bouncy Castle
我不希望使用其他提供商。有可能使它工作吗?当您对JCA服务可以使用什么算法有疑问时,您的第一个调用端口应该是JCA。在符合JCA的JVM中,服务保证支持的算法为:
MD2
MD5
SHA-1
SHA-256
SHA-384
SHA-512
final MessageDigest digest = MessageDigest.getInstance("SHA-256");
SHA-256应该是getInstance()的参数
谢谢。您在David Grant到达后一分钟到达,尽管链接已断开。是的,
“SHA256”
是Bouncy中的别名。我修复了一个Bouncy Castle bug,它在Bouncy的一个协议包中使用了“SHA256”
,而不是JCE中的标准名称“SHA-256”
。这是接受超过绝对最小值的危险——它以一种方式工作,但不能以另一种方式工作。那么,呃,当“保证”MD5失败时,你会怎么做。在Oracle JRE中,但仅在某些计算机上,而不是在其他计算机上。。。这让我现在很为难-(您是否检查了您的安全提供商?请确保为您的JVM版本获得正确的列表,java 8包含的算法多于java 6。