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 key
。 String
是常量吗?可以改吗?
准确的说,字符串不是你的key,而是你从key.getBytes()
得到的字节。虽然它可能适用于此示例,但这不是您应该在生产代码中执行的操作:
如果使用不同的字符集,- getBytes() 可能会将字符串转换为不同的字节(不太可能用于您的特定字符串,因为它只是 ASCII,但您必须注意这一点)。
- 您需要一个长度正确的字符串。
- 生成的密钥质量会很差。对于生产代码,您应该使用像 pbkdf2 这样的密钥派生函数来从密码之类的东西中派生出密钥。
还有另一个问题:除了使用 "AES" 之外,您还应该在构造 Cipher 对象时指定操作模式和填充(例如 "AES/CBC/PKCS5Padding")。否则第二个和第三个参数依赖于提供者。
我是加密新手。我正在寻找有关加密的代码,我想知道它是如何工作的,因为它很有趣,我喜欢在未来编写代码。
然后我找到了这段代码:
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 key
。 String
是常量吗?可以改吗?
准确的说,字符串不是你的key,而是你从key.getBytes()
得到的字节。虽然它可能适用于此示例,但这不是您应该在生产代码中执行的操作:
-
如果使用不同的字符集,
- getBytes() 可能会将字符串转换为不同的字节(不太可能用于您的特定字符串,因为它只是 ASCII,但您必须注意这一点)。
- 您需要一个长度正确的字符串。
- 生成的密钥质量会很差。对于生产代码,您应该使用像 pbkdf2 这样的密钥派生函数来从密码之类的东西中派生出密钥。
还有另一个问题:除了使用 "AES" 之外,您还应该在构造 Cipher 对象时指定操作模式和填充(例如 "AES/CBC/PKCS5Padding")。否则第二个和第三个参数依赖于提供者。