我从另一个SO问题得到了一个代码片段并对其进行了一些修改,但我似乎无法让它工作。任何人都可以找出原因吗?它目前正在打印[B @ 405e70bc或类似值。我所要做的就是以加密形式存储密码,仅仅是为了让它远离好奇的眼睛,有没有更好的方法呢?
String secret = "1234567812345678";
Key key = new SecretKeySpec(secret.getBytes(), "AES");
// Encrypt
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedData = cipher.doFinal("helloworld".getBytes());
// Decrypt
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decryptedData = cipher.doFinal(encryptedData);
System.out.println(decryptedData.toString());
答案 0 :(得分:0)
感谢亚历山大。
这有效
String secret = "1234567812345678";
Key key = new SecretKeySpec(secret.getBytes(), "AES");
// Encrypt
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedData = cipher.doFinal("helloworld".getBytes());
// Decrypt
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decryptedData = cipher.doFinal(encryptedData);
System.out.println(new String(decryptedData, "UTF-8"));
答案 1 :(得分:0)
加密/解密逻辑没有任何问题。问题是你在.toString()
上拨打byte []
。
请改用此输出语句:
System.out.println(new String(decryptedData));
答案 2 :(得分:0)
请不要将此用于任何关键的事情。标准Java AES代码使用固定长度的块密码,这可能导致相同的加密字节数据。结果是明文信息逐渐泄露。
如果您希望代码更强大,您应该查看密码块链接和初始化向量。 http://www.javamex.com/tutorials/cryptography/block_modes.shtml
对你的需求来说可能有些过分,但我想提到它。