RSA Hello World Program ...为什么它没有工作

时间:2012-11-28 20:05:17

标签: java encryption rsa

我试图在java中理解RSA - 但我无法弄清楚为什么这段代码不打印" Hello,World"我试图通过生成密钥对来确保我理解正确,加密" Hello World"并解密它。我有一段时间搞清楚我做错了什么

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

 }
}

1 个答案:

答案 0 :(得分:3)

更改

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

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

你赢了!

<强>解释

plainDatadoFinal的返回值为byte[]。您在使用toString()方法(类似[B@75589559)时看到的内容并未解密,但Java如何实现byte[]的{​​{1}}方法。

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