2012-11-28 41 views
3

我想了解在Java中的RSA - 但我不明白为什么这段代码不打印“你好,世界”我试图通过生成密钥对,加密“Hello World”并解密它,确保我理解正确。我有一个时间的魔鬼搞清楚什么我做错了RSA Hello World Program ...为什么它不工作

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()); 

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

与您共赢!

说明

plainDatadoFinal回报是byte[]。当您使用toString()方法(类似于[[email protected])时看到的内容未被破坏解密,但Java如何实现byte[]toString()方法。

在我建议的代码中,你正在用你提供的字节创建一个新的字符串 - 这就是你想要的。

+0

虽然只会打印“你好,Word”:) –