2012-11-28 3 views
3

자바에서 RSA를 이해하려고하는데,이 코드가 "Hello, World"를 인쇄하지 않는 이유를 알 수 없다. 키 쌍을 만들고, "Hello World"를 암호화하고 해독하여 올바르게 이해했는지 확인하십시오. 나는RSA Hello World 프로그램 ... 왜 작동하지 않는가?

System.out.print(new String(plainData)); 

에 잘못된

import java.security.*; 
import java.math.BigInteger; 
import java.io.ObjectOutputStream; 
import java.io.ObjectInputStream; 
import javax.crypto.spec.*; 
import java.security.spec.*; 
import java.io.BufferedOutputStream; 
import java.io.BufferedInputStream; 
import java.io.FileOutputStream; 
import java.io.FileInputStream; 
import java.io.IOException; 
import javax.crypto.Cipher; 

public class testrsa 
{ 
public static void main(String [] args) 
{ 
    try 
    { 
    byte[] cipherData, plainData; 
    KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); 
    kpg.initialize(4096); 
    KeyPair kp = kpg.genKeyPair(); 
    Key publicKey = kp.getPublic(); 
    Key privateKey = kp.getPrivate(); 

     Cipher cipher1 = Cipher.getInstance("RSA"); 
     cipher1.init(Cipher.ENCRYPT_MODE, publicKey); 
     cipherData = cipher1.doFinal("Hello, Word".getBytes()); 

     Cipher cipher2 = Cipher.getInstance("RSA"); 
     cipher2.init(Cipher.DECRYPT_MODE, privateKey); 
     plainData = cipher2.doFinal(cipherData); 

    System.out.print(plainData.toString()); 

    } 
    catch(Exception ex) 
    { 
     System.out.print(ex.toString()); 
    } 

} 
} 
+0

여기를보세요 : http://stackoverflow.com/questions/13556295/rsa-encryption-in-android/13571113#13571113 – Frank

+1

오류 메시지가 무엇인가요? – Miquel

답변

3

변경

System.out.print(plainData.toString()); 

을하고 있어요 그리고 당신이 이길 알아내는 시간의 악마가 있어요!

설명

plainData, doFinal의 반환은 byte[]이다. toString() 메서드 (예 : [[email protected])를 사용할 때 보았던 것은 암호 해독이 손상되지 않았지만 Java가 byte[]toString() 메서드를 구현하는 방법이었습니다.

내가 제안한 코드에서 제공하는 바이트로 새 문자열을 만들고 있습니다. 그러면 원하는 코드가 생성됩니다.

+0

여전히 "Hello, Word"만 인쇄됩니다. :) –