【发布时间】:2017-05-07 10:42:36
【问题描述】:
我正在用 Java 执行异或加密。它加密一个字节数组,将其转换为字符串,然后打印字符串。
但是,当我执行它时,我会在输出(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);
当我运行此代码时,它会为加密字符串打印奇怪的“框”。但是,当它解密字符串时,我会收到原始输出,表明加密算法有效。
为什么我收到加密输出的奇怪框,但解密时收到正确的字符串?
【问题讨论】:
-
能否提供
message和codebook的数据? -
你会得到盒子,因为它们不是可读的 ascii 字符
-
您正在尝试使用平台默认编码将任意二进制字节转换为字符串。您不能期望只取回有效的、可打印的字符。并非所有字节序列在所有编码中都是有效的字符序列,也不是所有字符都是可打印的。
-
为什么当你打印加密的东西时,你会期待一些可打印的东西?
-
当然。使用 Base64 编码将任意字节数组转换为可打印字符序列。
标签: java encryption xor