3

我们正在尝试在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));
4

1 回答 1

10

Java 7 SE 不支持此密码(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 的小片段。

  1. bcprov-jdk15on-154.jarhttp://www.bouncycastle.org/latest_releases.html下载
  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");
于 2016-05-25T08:56:23.943 回答