我的代码在Android上运行良好。当我使用JRE 1.6将其移植到我的Windows 64位机器时,代码无效。
当我运行以下代码行时:
final MessageDigest digest = MessageDigest.getInstance("SHA256")
我得到以下异常:
java.security.NoSuchAlgorithmException:SHA256 MessageDigest在sun.security.jca.GetInstance.getInstance(未知来源)中不可用 在java.security.Security.getImpl(未知来源)at java.security.MessageDigest.getInstance(未知来源)
我在互联网上发现人们声称可以将SHA256与Sun JRE附带的标准加密提供程序一起使用,人们说我需要使用其他提供程序,例如Bouncy Castle。
我不想使用其他提供商。是否有可能使其有效?
答案 0 :(得分:33)
如果您对可用于JCA服务的算法存在疑问,您的第一个停靠点应该是JCA Standard Algorithm Name Documentation。在符合JCA的JVM中,MessageDigest服务支持保证算法:
MD2
MD5
SHA-1
SHA-256
SHA-384
SHA-512
提供商为这些算法提供别名很常见,这就是为什么它可能与Bouncy Castle一起使用,但如果你能最大限度地提高可移植性,你应该坚持这些。
如果您将代码更改为以下代码,它将按预期工作:
final MessageDigest digest = MessageDigest.getInstance("SHA-256");
答案 1 :(得分:4)
SHA-256应该是getInstance()
的参数Link for the list of algorithms supported for message digest