【问题标题】:Encryption program returning weird string for encryption but correct string after decryption加密程序返回奇怪的字符串进行加密但解密后正确的字符串
【发布时间】: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);

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

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

【问题讨论】:

  • 能否提供messagecodebook的数据?
  • 你会得到盒子,因为它们不是可读的 ascii 字符
  • 您正在尝试使用平台默认编码将任意二进制字节转换为字符串。您不能期望只取回有效的、可打印的字符。并非所有字节序列在所有编码中都是有效的字符序列,也不是所有字符都是可打印的。
  • 为什么当你打印加密的东西时,你会期待一些可打印的东西?
  • 当然。使用 Base64 编码将任意字节数组转换为可打印字符序列。

标签: java encryption xor


【解决方案1】:

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

一个很好的参考:

Base64 Encoding in Java

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

【讨论】:

    猜你喜欢
    • 2020-07-14
    • 2016-03-26
    • 2012-08-30
    • 2013-05-29
    • 1970-01-01
    • 2020-02-21
    • 2012-07-01
    • 2018-08-26
    • 1970-01-01
    相关资源
    最近更新 更多