用Java加密字符串

Tim*_*kle 0 java encryption aes

我正在尝试使用Java和AES Cipher.getInstance(“ AES / CBC / PKCS5PADDING”)加密和解密字符串。

当我加密数据并尝试将其打印到控制台时,我得到的字符是这样的:

?0 ?? J?9U \?6N ???。??????«D?<(??? H(?G?j ???%??? u ?? ^ ??????'? bT /?05 ??? 0 + u)b ??? {G?d ?? /?:??〜???? J%???〜_ ??? _ ????〜?W? s?+] 9?{Y?N ???? J {??????Ä??

它是否正确?可以说“它是加密的”吗?我的期望是得到像“ WERWERWERWER”这样的文字字符串

Mat*_*usz 5

那是因为加密的消息以字节为单位(0-255)。要获得想要的字符串,您需要使用base 64编码输出。

基于此答案,您可以在Java 8中执行此操作,而无需使用任何库。

import java.util.Base64;

//base64 encoding
byte[] encodedBytes = Base64.getEncoder().encode("Test".getBytes("UTF-8"));
System.out.println("encodedBytes " + new String(encodedBytes));
//base64 decoding
byte[] decodedBytes = Base64.getDecoder().decode(encodedBytes);
System.out.println("decodedBytes " + new String(decodedBytes));
Run Code Online (Sandbox Code Playgroud)

替换"Test".getBytes("UTF-8")为AES的输出

  • 确保样品正确是很重要的。许多人不了解指定编码的重要性,当最终将它们咬在后面时,这会引起很多混乱。 (4认同)
  • 总是指定编码,例如`.getBytes(“ UTF-8”);`。 (2认同)