2013-08-08 2 views
2

내 서버 측에서 RSA 문자열의 암호를 해독하려고합니다. 로컬 서버에서 코드를 실행하는 동안 작동이 잘되는 이지만 GAE에 앱을 배포 할 때 메소드가 빈 문자열 (null이 아님)을 반환합니다.Google App Engine의 RSA

(문자열 입력 암호를 ​​해독 할 수있는 바이너리 데이터의 BASE64 표현입니다)이 내 코드입니다 : 원격으로 실행하는 동안

private static String decrypt(String pwd) { 
    byte[] input = Base64.decode(pwd); 


    try { 
     rsaCipher = Cipher.getInstance("RSA/ECB/NoPadding"); 
    } catch (NoSuchAlgorithmException e) { 
     return null; 
    } catch (NoSuchPaddingException e) { 
     return null; 
    } 

    KeyFactory keyFactory; 
    try { 
     keyFactory = KeyFactory.getInstance("RSA"); 
    } catch (NoSuchAlgorithmException e) { 
     return null; 
    } 

    String modString = "*********"; 
    String privateExponentString = "*********"; 

    RSAPrivateKeySpec prvKeySpec = new RSAPrivateKeySpec(new BigInteger(modString), new BigInteger(privateExponentString)); 
    RSAPrivateKey prvKey; 


    try { 
     prvKey = (RSAPrivateKey) keyFactory.generatePrivate(prvKeySpec); 
    } catch (InvalidKeySpecException e) { 
     return null; 
    } 

    try { 
     rsaCipher.init(Cipher.DECRYPT_MODE, prvKey); 
    } catch (InvalidKeyException e) { 
     return null; 
    } 
    byte[] cipherText; 
    try { 
     cipherText = rsaCipher.doFinal(input); 
    } catch (IllegalBlockSizeException e) { 
     return null; 
    } catch (BadPaddingException e) { 
     return null; 
    } 
    return new String(cipherText); 
} 

내가 서버 측에 약간의 디버깅을했다. 모든 항목이 '0'을 포함하면서

rsaCipher.doFinal(input); 

돌려 주어 바이트 배열 : 는 그 기능을 알았다.

하십시오 조언,

이 노암 코헨 당신과 안부 감사

+0

우선 (그들을 잡아서 null을 반환). 실제로 발생한 일을 알기 위해서는 오류를 기록해야합니다. –

+0

고맙습니다. 내가 업로드 한 코드 버전에서는 오류 처리 코드를 제거하여 코드를 이해하기 쉬워졌으며 컴파일러가 코드를 받아들이도록 "return null"을 추가했습니다. – thecohenoam

답변

0

를 사용해보십시오 다른 모든 바이트 동안 are (null, ASCII 코드 0). Google 로그에 일부 문자열이 표시되지 않고 빈 것처럼 보입니다. 난 그냥 출력 문자열의 모든 문자를 반복하고 있어요 내가이 사람을 도움이되기를 바랍니다 0

, 노암에서 내 문자열에 다른 ASCII 코드로 모든 문자를 복사

당신이 예외를 무시해서는 안 모든
0

new String(byteArray) 문자열로 바이트 배열을 디코딩하는 기본 JVM의 인코딩을 사용합니다. AppEngine에서는 US-ASCII가 궁금합니다.

원본 콘텐츠가 UTF-8 인 경우, 내가 출력 문자열은 항상 128 비트 길이, 오류를 발견했습니다, 원하는 암호화되지 않은 문자열 끝에 new String(cipherText), "UTF-8"

+0

감사. 그러나 나는 아직도 빈 문자열을 받고있다? 다른 아이디어있어? 당신의 도움을 주셔서 감사합니다. – thecohenoam