【问题标题】:Java AES Decryption get Decrypted Hex instead of Decrypted StringJava AES解密得到解密的十六进制而不是解密的字符串
【发布时间】:2017-04-11 04:05:46
【问题描述】:

尝试在 Java 中解密十六进制字符串时,我能够解密该字符串,但因为被加密的原始数据不是字符串,而是实际上是 32 位十六进制值。

加密后的十六进制字符串为"4ba3442d4bc3baf5126b7b271b359e42",此处使用的密钥为"ac00ac00ac00ac00ac00ac00ac00ac00"

我应该从 aes.online-domain-tools.com 获取的输出是 "× z X . b 3 ý . ä g í ý b Þ 。" 但是从这个字符串中可以看出,只有 zXb3gb 是一个普通的 ASCII 字符,其他是扩展字符,它们在控制台中变成了一个带有 65533 的 int 值的扩展字符反过来,我的原始数据也不正确。

但如果我们看到 aes.online-domain-tools.com 的输出,扩展 ASCII 字符的 ASCII 值是 原始数据的正确值但是因为它不是一个普通的 ASCII 字符而是一个扩展字符,它变成了一个带有值 65533 的�,这会在转换为整数时给我错误的值。

我想知道而不是将其解密为字符串,我是否能够直接将十六进制字符串解密为十六进制字符串,而不是解密为字符串并转换为 int。

目前这是我的解密代码:

public static String decrypt(String strToDecrypt)
{
    char[] ch=strToDecrypt.toCharArray();

    System.out.println("Test: " + ch);
    try
    {

        Cipher cipher2 = Cipher.getInstance("AES/ECB/NoPadding");

        cipher2.init(Cipher.DECRYPT_MODE, secretKey);

        setDecryptedString(new String(cipher2.doFinal(Hex.decodeHex(ch))));            // Output as String eg: testingone


    }
    catch (Exception e)
    {

        System.out.println("Error while decrypting: "+e.toString());
    }
    return null;
}

这是我用来将其转换为 INT 以检索原始值的代码块:

        System.out.println("String To Decrypt : " + strToDecrypt);

    final String decryptedString = getDecryptedString();
    char[]  asciiLine = decryptedString.toCharArray();

    for (char ch:asciiLine)
    {
        System.out.println("Decrypted : " + (int)ch+"  ");
    }

    System.out.println("TestDecrypted : " + test.getDecryptedString());
    System.out.println("StringDecrypted : " + decryptedString);
    System.out.println("DecodeDecrypted : " + Integer.decode(decryptedString));

【问题讨论】:

标签: java encryption cryptography aes


【解决方案1】:

您的解密本身似乎很好......但您对返回数据的处理不是......

doFinal 返回一个字节数组

您通过将其传递给 new String(...) 来处理它

您可能想要的是将该字节数组编码为十六进制数字字符串

看看这里...How to convert a byte array to a hex string in Java?

【讨论】:

  • 哦,天哪.. 谢谢兄弟.. 已经设法打印了预期的输出.. 感谢您的指导.. 所以这是处理返回数据的错误方法..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-13
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多