2009-06-16 2 views
-1

를 사용하여 데이터를 해독하기 위해 나와 내 친구가 같은 RSA 계수가 심비안는 어떻게 자바를 사용하고 내 친구의 RSA의 PrivateKey

를 사용합니다. 공개 키를 사용하여 데이터를 암호화하면 내 친구가 동일한 키를 해독 할 수 있습니다. 하지만 내 친구가 공개 키로 데이터를 암호화하면 데이터를 해독 할 수 없습니다. 나는 "데이터가 0으로 시작해야합니다"

public static byte[] encrypt(byte[] encrptdByte) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { 
    byte[] encryptionByte = null; 
    Cipher cipher = Cipher.getInstance("RSA"); 
    cipher.init(Cipher.ENCRYPT_MODE, publicKey); 
    encryptionByte = cipher.doFinal(encrptdByte); 
    return encryptionByte; 
} 

public static void decrypt(byte[] encrptdByte) throws NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException { 
    byte[] encryptionByte = null; 
    Cipher cipher = Cipher.getInstance("RSA"); 
    cipher.init(Cipher.DECRYPT_MODE, publicKey); 
    encryptionByte = cipher.doFinal(encrptdByte); 

    System.out.println("Recovered String  ::: " + new String(encryptionByte)); 
} 

감사 선일과 같은 오류가 발생했습니다

+0

사용중인 Java 코드 중 일부 또는 어떤 라이브러리를 게시 할 수 있습니까? – Thilo

+0

암호화 모드가없는 패딩없이 RSA를 사용하고 있습니다. – Sunil

+0

나는 그것을 보아주세요. – Sunil

답변

6

decrypt 기능 publicKey를 사용합니다 - 그것은 어디에서 오는가? 공개 키로 암호화 된 데이터는 동일한 공개 키가 아닌 해당 개인 키로 해독되어야합니다. RSA와 같은 비대칭 암호화는 쌍의 각 키가 다른 키로 암호화 된 데이터를 해독 할 수있는 키 쌍의 개념을 가지고 있습니다. 암호화 및 해독을 위해 동일한 키가 작동하는 AES와 같은 대칭 암호화와는 대조적입니다.

+0

예, Symbian은 내가 보낸 모듈을 사용하여 공개 키를 만들었습니다. 아직도 그 문제가 발생했습니다. 감사합니다. – Sunil

+0

RSA 키는 모듈러스 N뿐 아니라 암호화를위한 지수 E와 해독을위한 지수 D도 있습니다. 공개 키는 본질적으로 (E, N)이며 개인 키는 (D, N)입니다. – laalto

+0

아니요 모듈러스를 사용하여 RSA 공개 키를 만들 수 없습니다. – Sunil

2

이전 게시물을 추가하려면 대칭 암호화보다 상당히 느리기 때문에 비대칭 암호화를 사용하여 대량으로 데이터를 암호화/해독하는 것은 실용적이지 않습니다. 비대칭 암호화 (RSA와 같은)의 가장 실용적인 사용은 데이터를 암호화하고 메시지 다이제스트 (SHA-256 등)의 보안 해시에 서명하는 데 사용 된 대칭 키 (AES 또는 유사한 알고리즘 용)를 암호화하는 것입니다.

암호화 된 메시지는 일반적으로 암호화 된 메시지와 암호화에 사용되는 키가 들어있는 "봉투"에 봉인되어 있습니다. 물론 키는 수신자 공개 키로 암호화되므로 소유자 만 개인 키가 키를 검색 할 수 있습니다.

마지막으로 메시지의 보낸 사람은 선택적으로 메시지의 보안 해시를 계산하고이를 보낸 사람의 개인 키로 암호화 할 수 있습니다. 수신자는 보낸 사람의 공개 키를 사용하여 암호화 된 해시를 해독하고 계산 된 해시와 비교하여 보낸 사람의 신원을 확인합니다.

+0

RSA = 117 바이트를 사용하여 암호화 할 수있는 최대 데이터는 있지만 데이터는 14 바이트입니다. – Sunil

+0

Sunil, Java Crypto API에 익숙하지 않지만 암호 해독을 위해서는 개인 키에 액세스해야합니다. 그 cipher.Init() 전달 된 publicKey 기반으로 개인 키를 액세스 할 수있는 몇 가지 방법이 있다고 가정합니다? 친구가 공개 키를 사용하여 암호화 된 데이터를 해독 할 수 있었기 때문에 개인 키를 전달 했습니까? –

관련 문제