Java RSA你好世界计划。。。为什么不是';这不管用吗

Java RSA你好世界计划。。。为什么不是';这不管用吗,java,encryption,rsa,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.*;

我试图理解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());
     }

 }
}
改变

你赢了

解释

plainData
,返回的是一个
字节[]
。使用
toString()
方法(类似
[B@75589559
)没有损坏解密,而是Java如何实现
byte[]
toString()
方法


在我建议的代码中,您正在使用提供的字节创建一个新字符串,这正是您所需要的。

请看这里:您的错误消息是什么?但仍将只打印“Hello,Word:)
System.out.print(plainData.toString());
System.out.print(new String(plainData));