在Java中加密时如何返回和显示RSA密文

在Java中加密时如何返回和显示RSA密文,java,cryptography,rsa,Java,Cryptography,Rsa,我正在编写一个简单的java程序,使用java编写DES和RSA算法进行加密/解密。在Java中,为了使用函数doFinal进行加密和解密,我必须将消息(纯文本)转换为字节。我使用函数.getBytes来实现这一点。以下是代码的一部分: Cipher desCipher // Create the cipher desCipher = Cipher.getInstance("DES/ECB/NoPadding"); desCipher.init(Cipher.ENCRYPT_MODE, myD

我正在编写一个简单的java程序,使用java编写DES和RSA算法进行加密/解密。在Java中,为了使用函数
doFinal
进行加密和解密,我必须将消息(纯文本)转换为字节。我使用函数
.getBytes
来实现这一点。以下是代码的一部分:

Cipher desCipher
// Create the cipher 
desCipher = Cipher.getInstance("DES/ECB/NoPadding");
desCipher.init(Cipher.ENCRYPT_MODE, myDesKey);
byte[] textEncrypted = desCipher.doFinal(msgBytes);
然后,将其返回为:

return new String(base64Cipher);
在这种情况下,我得到的密码文本看起来很奇怪,例如:

Encrypted Message: °;zRfwجvë    ‏“ëثw‰ڑل7دM#¼7وm‡î¤
在一些internet教程中,他们在返回密码之前使用Base64编码,如以下引用:

当我使用Base64时,如下所示:

字节[]textEncrypted=desCipher.doFinal(msgBytes)

密码文本以字母和数字字符显示,如下所示:

Encrypted Message: Xz93ODw3gEKm3hziPr0UJ+ed55nWLGpTR9uHjZjLwtg=
哪种方法是正确的?RSA密码是否应该仅使用字母数字字符?如果没有,为什么裁判建议使用它

为什么是base64? base64编码的文本将在格式引起的更改中幸存下来,而二进制流不会——例如,如果您的消息传输的是仅限ASCII的管道。它也更容易嵌入电子邮件、复制和粘贴,等等

关于base64的价值,这是一个很好的答案


至于哪种方法是正确的——假设您正确编码和解码,字节流应该是等效的。

将二进制数据视为字符串永远都是不正确的,OP甚至可能会发现他的代码的行为依赖于平台,因为它依赖于平台默认编码。
Encrypted Message: Xz93ODw3gEKm3hziPr0UJ+ed55nWLGpTR9uHjZjLwtg=