加密程序返回奇怪的加密字符串但解密后正确的字符串

Encryption program returning weird string for encryption but correct string after decryption

我正在 Java 中执行异或加密。它加密一个字节数组,将其转换为一个字符串,然后打印该字符串。

然而,当我执行它时,我在输出(Eclipse 控制台)中变得奇怪 "boxes"。

算法代码:

for(int i = 0; i < messageArr.length; i++)
{
    encryptedMessage[i] = (byte) (messageArr[i]^codebookArr[i]);
}

String eMessage = new String(encryptedMessage);
return eMessage;

main方法:

String lMessage = e.xorEncrypt(message, codebook);
System.out.println("Encrypted message: " + lMessage);
String uMessage = e.xorEncrypt(lMessage, codebook);
System.out.println("Unencrypted message: " + uMessage);

当我 运行 这段代码时,它会为加密字符串打印出奇怪的 "boxes"。但是,当它解密字符串时,我收到了原始输出,表明加密算法有效。

为什么我收到加密输出的奇怪框,但解密时收到正确的字符串?

您可以在加密后使用 Base64 编码(这是最佳做法),这样就不会出现奇怪的框,也不会在 "travel" 中丢失特殊字符。

很好的参考:

Base64 Encoding in Java

你会得到一个类似这样的字符串:b2xkIGNyb3cgbWVkaWNpbmUgc2hvdw==