【问题标题】:AES using Base64 Encryption使用 Base64 加密的 AES
【发布时间】:2011-04-08 13:47:39
【问题描述】:

我的目标是使用 AES 加密字符串 我使用 Base64 进行加密,因为 AES 需要一个字节数组作为输入。 此外,我希望正确存储所有可能的字符(包括中文和德文符号)

    byte[] encryptedBytes = Base64.decodeBase64 ("some input");
System.out.println(new Base64().encodeToString(encryptedBytes));

我认为应该打印“一些输入”。而是打印“someinpu”。 我不可能使用 sun.misc.* 而是使用 apache.commons.codec

有人知道出了什么问题吗?

【问题讨论】:

    标签: java base64 aes


    【解决方案1】:

    是的 - “某些输入”不是有效的 base64 编码字符串。

    base64 的思想是将二进制数据编码成文本。然后,您将该 text 数据解码为字节数组。您不能将任意文本解码为完整的 base64 消息,就像您尝试将 mp3 解码为 jpeg 图像一样。

    加密一个字符串应该是这个过程:

    • 将字符串编码为二进制数据,例如使用 UTF-8 (text.getBytes("UTF-8"))
    • 使用 AES 加密二进制数据
    • 使用 Base64 对密文进行编码以获取文本

    解密是这样的:

    • 将 base64 文本解码为二进制密文
    • 解密密文得到二进制明文
    • 使用与上述第一步相同的编码将二进制明文解码为字符串,例如new String(bytes, "UTF-8")

    【讨论】:

      【解决方案2】:

      您不能使用 Base64 将任意文本转换为字节;这不是它的设计目的。

      您应该使用 UTF8:

      byte[] plainTextBytes = inputString.getBytes("UTF8");
      
      String output = new String(plainTextBytes, "UTF8");
      

      【讨论】:

        猜你喜欢
        • 2013-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        • 2019-12-25
        相关资源
        最近更新 更多