2014-12-04 1 views
1

Я использую логику парольного дескрипции с использованием шифрования java. При этом, получая экземпляр шифрования, используя cipher.getInstance("RSA/NONE/NoPadding"). Я получаю следующее исключение: NoSuchAlgorithm.Исключение исключения NoSuchAlgorithm при использовании метода cipher.getInstance

Этот же код работает на моей локальной настройке сервера jboss, но не работает в настройке сервера IBM-WAS. Есть ли разница между локальным сервером jboss и сервером WAS?

public static String decrypt(String encrypted, KeyPair keys) { 
    Cipher dec; 
    try { 

     dec = Cipher.getInstance("RSA/NONE/NoPadding"); //Exception raised 
     dec.init(Cipher.DECRYPT_MODE, keys.getPrivate()); 

    } catch (GeneralSecurityException e) { 
     throw new RuntimeException("RSA algorithm not supported", e);//Catch block executed 
    } 
} 

Вход:

R Caused by: java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/NONE/NoPadding 
    at java.lang.Throwable.<init>(Throwable.java:80) 
    at javax.crypto.Cipher.getInstance(Unknown Source) 
    at com.lsi.utils.JCryptionUtil.decrypt(JCryptionUtil.java:59) 
    Caused by: java.security.NoSuchAlgorithmException: Mode: NONE not implemented 
    at com.ibm.crypto.provider.RSA.engineSetMode(Unknown Source) 
    at javax.crypto.Cipher$a_.a(Unknown Source) 

**Jar** 

Jce.jar - javax.crypto.Cipher; 
bcprov-jdk15-140.jar (External security provider jar) 

ответ

3

Oracle поставщика безопасности поддерживает только режим ECB вместо NONE. Алгоритмы предоставляются security providers, зарегистрированными в JVM и их именами до создателей провайдеров.

В ситуации, когда вы не можете заранее знать, какие поставщики безопасности установлены в среде исполнения, вы можете попробовать различные варианты. Например, как это:

Cipher cipher = null; 
try { 
    cipher = Cipher.getInstance("RSA/ECB/NoPadding"); 
} catch (NoSuchAlgorithmException e) { 
    cipher = Cipher.getInstance("RSA/NONE/NoPadding"); 
} 

Другая возможность состоит в том, чтобы проверить установленные поставщик при запуске решения о гриме об алгоритмах

for (Provider provider : Security.getProviders()) { 
    for (Provider.Service service : provider.getServices()) { 
     System.out.println(provider.getName() + ": " + service.getType() + "." + service.getAlgorithm()); 
     // check these values and find a best match 
    } 
} 
+1

Но обратите внимание, что * неправильно * называемый ЕЦБ, поскольку он не позволяет для шифрования блоков данных больше модуля (размер ключа). Кроме того, крайне опасно использовать «NoPadding». Вместо этого используйте OAEP в гибридной криптосистеме. –

 Смежные вопросы

  • Нет связанных вопросов^_^