AES字符串加密/解密

时间:2015-01-19 11:44:08

标签: java encryption aes

我是加密的新手。我正在寻找有关加密的代码,我正在尝试知道它是如何工作的,因为它很有趣,我喜欢将来编码。

然后我找到了这段代码:

  System.out.print("Enter text: ");
      String text = dataIn.readLine();
      String key = "Bar12345Bar12345"; // 128 bit key

       // Create key and cipher
     Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
     Cipher cipher = Cipher.getInstance("AES");
 ...

在我开始研究之前。我不知道String = Bar12345Bar12345是如何运作的。它说它是128 bit keyString是否恒定?改变它可以吗?

1 个答案:

答案 0 :(得分:3)

准确地说,字符串不是您的密钥,而是您从key.getBytes()获得的字节数。虽然它可能适用于此示例,但这不是您应该在生产代码中执行的操作:

    如果使用不同的字符集,则
  • getBytes()可以将字符串转换为不同的字节(不太可能是您的特定字符串,因为它只是ASCII,但您必须注意)。
  • 您需要一个正确长度的字符串。
  • 生成的密钥质量很差。对于生产代码,您应该使用密钥派生函数(如pbkdf2)从密码中获取密钥。

还有另一个问题:不只是使用" AES"您还应该在构造Cipher对象时指定操作模式和填充(例如" AES / CBC / PKCS5Padding")。否则,第二个和第三个参数取决于提供者。