【问题标题】:Cannot find any provider supporting AES/GCM/NoPadding找不到任何支持 AES/GCM/NoPadding 的提供商
【发布时间】:2016-05-25 08:04:55
【问题描述】:

我们正在尝试在 java 7 中进行支持 AES/GCM/NoPadding 的加密,但遇到异常情况。

找不到任何支持 AES/GCM/NoPadding 的提供商

生成密码实例的代码示例如下。

SecretKeySpec eks = new SecretKeySpec(k, "AES");
Cipher c = Cipher.getInstance("AES/GCM/NoPadding");
c.init(Cipher.ENCRYPT_MODE, eks, new GCMParameterSpec(128, iv));

【问题讨论】:

    标签: java encryption aes-gcm


    【解决方案1】:

    Java 7 SE (exception for Solaris) 不支持此密码。

    public static void main(String[] args) throws Exception {
        for (Provider provider : Security.getProviders()) {
            for (Map.Entry<Object, Object> entry : provider.entrySet()) {
                if (((String) entry.getValue()).contains("GCM")) {
                    System.out.printf("key: [%s]  value: [%s]%n",
                        entry.getKey(),
                        entry.getValue());
                }
            }
        }
    }
    

    在这种情况下,您可能会查看 Bouncy Castle 作为服务提供商。

    用于使用 Bouncycastle 的小 sn-p。

    1. http://www.bouncycastle.org/latest_releases.html下载bcprov-jdk15on-154.jar
    2. 在您的代码中注册服务提供者

      Security.addProvider(new BouncyCastleProvider());
      
    3. 那么你就可以使用密码了(参数"BC"指定使用Bounce Castle作为服务提供者,如果没有其他相同密码的提供者可以省略)

      Cipher c = Cipher.getInstance("AES/GCM/NOPADDING", "BC");
      

    Java 8 支持开箱即用的密码

    Cipher c = Cipher.getInstance("AES/GCM/NOPADDING");
    

    【讨论】:

    • 非常感谢您提供此信息,您是否有任何示例代码如何在 Bounty Castle 中使用 AES/GCM/Padding,非常感谢。
    • @RE350 我在答案中添加了必要的行。您需要做的主要事情是注册新的服务提供商。
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2018-02-19
    • 2021-09-24
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2016-11-14
    • 2018-09-20
    相关资源
    最近更新 更多