Java简单的helloworld AES加密解密

时间:2015-02-13 19:00:26

标签: java encryption

我从另一个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());

3 个答案:

答案 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

对你的需求来说可能有些过分,但我想提到它。