我从另一个人那里得到了一个代码片段,所以我对它进行了一些质疑和修改,但我似乎无法让它工作起来。有人能找出原因吗?它目前正在打印[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());发布于 2015-02-13 19:09:32
加密/解密逻辑没有什么问题。问题在于您在一个.toString()上调用byte []。
请使用以下输出语句:
System.out.println(new String(decryptedData));
发布于 2015-02-13 19:08:05
谢谢亚历山大。
这起作用了
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"));发布于 2015-02-13 19:55:19
请不要用这个来做任何重要的事情。标准的Java代码使用的是一个固定长度的分组密码,可以得到相同的加密字节数据。其结果是明文信息逐渐泄漏。
如果您希望您的代码更健壮,您应该查看密码块链接和初始化向量。modes.shtml
为了满足你的需要,这可能太过分了,但我想我应该提一下。
https://stackoverflow.com/questions/28506782
复制相似问题