AES 字符串 Encryption/Decryption

AES String Encryption/Decryption

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

然后我找到了这段代码:

  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 是常量吗?可以改吗?

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

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

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