20

我的代码在 Android 上运行良好。当我用 JRE 1.6 将它移植到我的 Windows 64 位机器上时,代码不起作用。

当我运行以下代码行时:

final MessageDigest digest = MessageDigest.getInstance("SHA256")

我得到以下异常:

java.security.NoSuchAlgorithmException:SHA256 MessageDigest 在 sun.security.jca.GetInstance.getInstance(Unknown Source) at java.security.Security.getImpl(Unknown Source) at java.security.MessageDigest.getInstance(Unknown Source) 不可用

我在 Internet 上发现有人声称可以将 SHA256 与 Sun JRE 附带的标准加密提供程序一起使用,有人说我需要使用另一个提供程序,例如 Bouncy Castle。

我宁愿不使用不同的提供商。有可能让它工作吗?

4

2 回答 2

38

当您对可以为 JCA 服务使用哪些算法存有疑问时,您的第一站应该是 JCA标准算法名称文档。在符合 JCA 的 JVM 中, MessageDigest服务保证支持的算法有:

  • MD2
  • MD5
  • SHA-1
  • SHA-256
  • SHA-384
  • SHA-512

提供者为这些算法提供别名是很常见的,这就是为什么它可能会与 Bouncy Castle 一起使用,但如果可以最大限度地提高可移植性,您应该坚持使用这些别名。

如果您将代码更改为以下内容,它将按预期工作:

final MessageDigest digest = MessageDigest.getInstance("SHA-256");
于 2012-09-28T15:20:36.830 回答
4

SHA-256 应该是 getInstance() 的参数

消息摘要支持的算法列表的链接

于 2012-09-28T15:21:42.603 回答