我有在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。
我宁愿不使用其他提供商。有可能使其工作吗?
如果对可用于JCA服务的算法有疑问,则第一个调用端口应为JCA 标准算法名称文档。 保证 与JCA兼容的JVM中MessageDigest服务支持的算法是:
MD2
MD5
SHA-1
SHA-256
SHA-384
SHA-512
提供者通常为这些算法提供别名,这就是为什么它可能与Bouncy Castle一起工作的原因,但是如果您可以最大限度地提高可移植性,则应该坚持使用这些别名。
如果将代码更改为以下代码,它将按预期工作:
final MessageDigest digest = MessageDigest.getInstance("SHA-256");