调用MessageDigest.getInstance(“SHA256”)时出现异常

时间:2012-09-28 15:14:34

标签: java cryptography sha256

我的代码在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。

我不想使用其他提供商。是否有可能使其有效?

2 个答案:

答案 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