RE350 RE350 - 6 months ago 60
Java Question

Cannot find any provider supporting AES/GCM/NoPadding

We are trying to do encryption supporting AES/GCM/NoPadding in java 7 getting below exception.

Cannot find any provider supporting AES/GCM/NoPadding

Code sample for generating cipher instance is below.

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

Answer

This cipher is not supported by Java 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());
            }
        }
    }
}

You might have a look at Bouncy Castle as service provider in that case.

Small snippet for using Bouncycastle.

  1. download bcprov-jdk15on-154.jar from http://www.bouncycastle.org/latest_releases.html
  2. register the service provider in your code

    Security.addProvider(new BouncyCastleProvider());
    
  3. then you are able to use the cipher as

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