Java 使用Base64加密的AES

Java 使用Base64加密的AES,java,base64,aes,Java,Base64,Aes,我的目标是用AES加密字符串 我使用Base64进行加密,因为AES需要一个字节数组作为输入。 此外,我希望所有可能的字符(包括中文和德文符号)都能正确存储 byte[] encryptedBytes = Base64.decodeBase64 ("some input"); System.out.println(new Base64().encodeToString(encryptedBytes)); 我认为应该打印“一些输入”。而是打印“someinpu”。 我不可能使用sun.m

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

    byte[] encryptedBytes = Base64.decodeBase64 ("some input");
System.out.println(new Base64().encodeToString(encryptedBytes));
我认为应该打印“一些输入”。而是打印“someinpu”。 我不可能使用sun.misc.*而是使用apache.commons.codec

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

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

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

加密字符串应在以下过程中完成:

  • 将字符串编码为二进制数据,例如使用UTF-8(
    text.getBytes(“UTF-8”)
  • 使用AES加密二进制数据
  • 使用Base64对cyphertext进行编码以获取文本
然后,解密是一个问题:

  • 将base64文本解码为二进制密码文本
  • 解密密码文本以获得二进制明文
  • 使用与上述第一步相同的编码将二进制明文解码为字符串,例如
    新字符串(字节,“UTF-8”)

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

      相反,您应该使用UTF8:

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