一尘不染

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

java

我有在Android上运行良好的代码。当我将其移植到具有JRE 1.6的Windows 64位计算机上时,该代码不起作用。

当我运行以下代码行时:

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

我得到以下异常:

java.security.NoSuchAlgorithmException:SHA256
MessageDigest在java.security.MessageDigest.getInstance(未知源)处的java.security.Security.getImpl(未知源)处的sun.security.jca.GetInstance.getInstance(未知源)处不可用

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

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


阅读 777

收藏
2020-12-03

共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");
2020-12-03