2017-05-06 101 views
-2

我正在Java中执行xor加密。它加密一个字节数组,将其转换为一个字符串,然后打印该字符串。但是,当我执行它时,输出(Eclipse控制台)中会出现奇怪的“框”。加密程序返回奇怪的字符串进行加密,但解密后的字符串正确

算法代码:

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

当我运行这段代码,它打印的加密字符串奇怪的 “盒子”。但是,当它解密字符串时,我会收到原始输出,显示加密算法的工作原理。

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

+0

你能提供'message'和'codebook'的数据? –

+0

你得到盒子,因为它们是不可读的ASCII字符 –

+1

你试图使用平台默认编码将任意二进制字节转换为字符串。你不能指望只取回有效的,可打印的字符。并非所有字节序列在所有编码中都是有效的字符序列,并非所有字符都可打印。 –

回答

0

加密后可以使用Base64编码(这是最佳做法),因此您不会看到奇怪的框,也不会在“旅行”中丢失特殊字符。

一个很好的参考:

Base64 Encoding in Java

你会得到一个字符串有点像这样:b2xkIGNyb3cgbWVkaWNpbmUgc2hvdw ==