2014-12-04 6 views
1

암호 암호를 사용하여 암호 해독 논리를 수행하고 있습니다. 그 안에서, cipher.getInstance("RSA/NONE/NoPadding")을 사용하여 암호의 인스턴스를 얻는 동안. 다음 예외가 발생합니다 : NoSuchAlgorithm.cipher.getInstance 메서드를 사용하는 동안 NoSuchAlgorithm 예외가 발생했습니다.

내 로컬 jboss 서버 설정에서 동일한 코드가 작동하지만 IBM-WAS 서버 설정에서 작동하지 않습니다. 로컬 jboss Server와 WAS Server간에 차이점이 있습니까?

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

오라클 보안 공급자 대신 NONEECB 모드를 지원합니다. 알고리즘은 security providers에 의해 제공되며 JVM에 등록되며 공급자 작성자까지 이름이 등록됩니다.

사전에 실행 환경에 설치된 보안 공급자를 알 수없는 경우 다른 옵션을 시도해 볼 수 있습니다. 예를 들어, 다음과 같이 :

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

또 다른 가능성은 암호화를 허용하지 않는 *에 ECB를 알고리즘에 대한 시작에

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를 사용하십시오. –