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

2022-09-02 09:02:53

我有在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)

我在互联网上发现有人声称可以将SHA256与Sun JRE附带的标准加密提供商一起使用,人们说我需要使用其他提供商,例如Bouncy Castle。

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


答案 1

如果对可用于 JCA 服务的算法有疑问,您的第一个调用端口应该是 JCA 标准算法名称文档。在符合 JCA 的 JVM 中,MessageDigest 服务保证支持的算法包括:

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

提供商通常会为这些算法提供别名,这就是为什么它可能适用于Bouncy Castle的原因,但是如果可以的话,您应该坚持使用这些别名以最大限度地提高可移植性。

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

final MessageDigest digest = MessageDigest.getInstance("SHA-256");

答案 2

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

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


推荐