2013-07-23 1 views
4

내 안드로이드 응용 프로그램에 문제가 있습니다. 내가 응용 프로그램에 RSA 암호화/해독과 관련된 노력하고있어. 이건 내 문제입니다 :ArrayIndexOutOfBoundsException : RSA 블록에 대한 데이터가 너무 많습니다.

짧은 문장을 명확하게 암호화 할 수 있지만이 메시지를 원본 텍스트로 해독하면 오류가 발생합니다 ("너무 많은 데이터를 RSA 블록 "). 그리고 또한 내가 긴 문장을 암호화하려면 내가 같은 error.I이 문제에 대한 몇 가지 검색을했고,이 사이트에 몇 가지 솔루션을 찾을 수 있습니다

Site 1

Site 2

Site 3

을 하지만 난 이해가 안 돼,이 솔루션은 너무 복잡해. 어떻게이 문제를 해결할 수 있니? 누가 나에게 좀 더 간단한 해결책을 줄 수 있니? 고맙습니다.

EDİT : 다음은이 프로젝트에서 사용하는 코드 블록입니다.

public String RSAEncrypt(String plain) throws NoSuchAlgorithmException, NoSuchPaddingException,InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidKeySpecException, UnsupportedEncodingException { 

    publicKey = getPublicKey(); 
    Cipher cipher = Cipher.getInstance("RSA"); 
    cipher.init(Cipher.ENCRYPT_MODE, publicKey); 
    byte[] cipherData = cipher.doFinal(plain.getBytes()); 
    return Base64.encodeToString(cipherData, Base64.DEFAULT); 
} 

public String RSADecrypt(byte[] encryptedBytes) throws NoSuchAlgorithmException, NoSuchPaddingException,InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidKeySpecException, UnsupportedEncodingException { 

    privateKey = getPrivateKey(); 
    Cipher cipher = Cipher.getInstance("RSA"); 
    cipher.init(Cipher.DECRYPT_MODE, privateKey);  
    byte[] cipherData = cipher.doFinal(encryptedBytes); 
    return Base64.encodeToString(cipherData, Base64.DEFAULT); 
} 
+0

이 답변을 통해 도움을받을 수 있습니다. http://stackoverflow.com/a/16547038/2198638 – Brtle

+0

Ok. 나는 내가 틀린 길에 있다는 것을 이해한다. 나는 cyrpto 방법을 바꿔야 해. 너의 도움에 감사드립니다. –

+0

여러분을 환영합니다! – Brtle

답변

15

RSA는 키 쌍의 모듈러스보다 몇 바이트 짧은 메시지 만 암호화 할 수 있습니다. 추가 바이트는 패딩 용이며 정확한 숫자는 사용중인 패딩 구성표에 따라 다릅니다.

RSA는 데이터 전송이 아닌 키 전송 용입니다. 긴 메시지가 있으면 임의의 키를 사용하여 AES로 암호화하십시오. 그런 다음 메시지 수신자의 공개 키를 사용하여 RSA로 AES 키를 암호화하십시오. Cipher 클래스의 wrap()unwrap() 메소드를 사용해야합니다.

이것은 PGP, S/MIME, TLS (대략적으로) 및 다른 올바르게 설계된 RSA 암호화 체계가 작동하는 방식입니다.

관련 문제