有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

当我运行以下代码行时:

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

我得到以下例外情况:

java.security.NoSuchAlgorithmException: SHA256 MessageDigest not available at 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

我不希望使用其他提供商。有可能使它工作吗


共 (2) 个答案

  1. # 1 楼答案

    当您对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");