我的目标是使用AES加密字符串 我使用Base64进行加密,因为AES需要一个字节数组作为输入。 此外,我希望每个可能的Char(包括中文和德文符号)都能正确存储
byte[] encryptedBytes = Base64.decodeBase64 ("some input");
System.out.println(new Base64().encodeToString(encryptedBytes));
我认为应该打印“一些输入”。而是打印“someinpu”。 我不可能使用sun.misc。*而是使用apache.commons.codec
有人知道出了什么问题吗?
答案 0 :(得分:19)
是 - “某些输入”不是有效的base64编码字符串。
base64的想法是将二进制数据编码为 text 。然后,将 text 数据解码为字节数组。你不能只是解码任何任意文本,就好像它是一个完整的base64消息,你可以尝试将mp3解码为jpeg图像。
加密字符串应该是这个过程:
text.getBytes("UTF-8")
)解密就是:
new String(bytes, "UTF-8")
答案 1 :(得分:1)
您不能使用Base64将任意文本转换为字节;这不是它的目的。
相反,您应该使用UTF8:
byte[] plainTextBytes = inputString.getBytes("UTF8");
String output = new String(plainTextBytes, "UTF8");