我有String s="abc";
加密字符串显示:ðá£ÅÉûË¿~?‰+×µÚ
并解密相同的值。
但现在我有与ðá£ÅÉûË¿~?‰+×µÚ
相同的加密字符串,我可以获得/解密它吗?下面我正在使用的代码。
String key = "Bar12345Bar12345"; // 128 bit key
// Create key and cipher
Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
// encrypt the text
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
byte[] encrypted = cipher.doFinal(text.getBytes());
String e=new String(encrypted);
byte[] encrypted1 = cipher.doFinal(e.getBytes());
System.out.println(encrypted.length+" "+encrypted1.length);
System.out.println(e);
// decrypt the text
cipher.init(Cipher.DECRYPT_MODE, aesKey);
String decrypted = new String(cipher.doFinal(encrypted));
System.out.println(decrypted);
答案 0 :(得分:5)
您不应尝试从随机字节流创建字符串。
如果需要加密文本的字符串表示形式 - 请使用一些二进制安全编码,例如java.util.Base64。
因此,如果不修复文本的加密部分(由其他人评论),您需要做的是:
编码:
String text = "abc";
String key = "Bar12345Bar12345";
Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
byte[] encrypted = cipher.doFinal(text.getBytes());
Base64.Encoder encoder = Base64.getEncoder();
String encryptedString = encoder.encodeToString(encrypted);
System.out.println(encryptedString);
解码:
Base64.Decoder decoder = Base64.getDecoder();
cipher.init(Cipher.DECRYPT_MODE, aesKey);
String decrypted = new String(cipher.doFinal(decoder.decode(encryptedString)));
System.out.println(decrypted);