我有在Android上运行良好的代码。当我将它移植到安装了JRE 1.6的Windows 64位计算机上时,代码无法工作。
当我运行以下代码行时:
final MessageDigest digest = MessageDigest.getInstance("SHA256")
我得到了以下异常:
java.security.NoSuchAlgorithmException: java.security.MessageDigest.getInstance(Unknown源的java.security.Security.getImpl(未知源)的SHA256 MessageDigest在sun.security.jca.GetInstance.getInstance(Unknown源中不可用)
我在互联网上发现,有人声称可以将SHA256与Sun JRE附带的标准加密提供程序一起使用,还有人说我需要使用另一个提供程序,例如Bouncy Castle。
我不希望使用不同的提供商。有没有可能让它正常工作?
发布于 2012-09-28 23:20:37
当您不确定可以为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");
发布于 2012-09-28 23:21:43
SHA-256应该是getInstance()的参数
Link for the list of algorithms supported for message digest
https://stackoverflow.com/questions/12642742
复制相似问题