【发布时间】:2017-12-21 00:46:33
【问题描述】:
我对加密的东西完全陌生,我对 java 中的加密有一些疑问 我曾经在java中为RSA加密做这个
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPTION_MODE,publicKey);
byte result = cipher.doFinal(data);
与使用 AES 的方法相同,我使用此代码生成 AES 密钥
SecureRandom random = new SecureRandom();
byte [] key = new byte [16];
random.nextByte(key);
SecretKeySpec secretKey = new SecretKeySpec(key,"AES");
但正如我在其他程序代码中看到的那样,这不是他们使用加密的方式,我总是看到他们在 AES 中使用一些东西作为 IV 参数,他们从不使用“AES”或“RSA”来获取密码实例。 我用来加密数据的方式安全吗? 我确定我错过了什么
更新:
我还有一个关于在 AES 加密中更改数据大小的问题,我使用 AES 加密数据的方式将数据大小从 1024 更改为 1040
byte key [] = new byte[16];
SecureRandom random = new SecureRandom();
random.nextBytes(key);
SecretKeySpec keySpec = new SecretKeySpec(key,"AES");
Cipher c = Cipher.getInstance("AES");
c.init(Cipher.ENCRYPT_MODE,keySpec);
FileInputStream in = new FileInputStream("test.txt");
byte [] buffer = new byte[1024];
byte [] encrypted;
while (in.read()>0){
encrypted = c.doFinal(buffer);
System.out.println(encrypted.length);
}
输出是: 1040 1040 . . 1040
简单加密的数据大小总是比原始数据多 16 个字节 我必须处理这个还是因为我使用 Cipher.getInstance("AES");
【问题讨论】:
-
我认为这个基本的或教程的问题太宽泛了。但由于它们有时会吸引好的答案,我会推迟投票。在线上有许多出色的资源,您可以使用它们来加快速度。
-
Spring 安全
-
这个太宽泛了。密码学是一个复杂的问题,您必须在尝试对其进行编程之前了解它,至少如果您希望保持安全。例如,您需要了解IV 是什么以及为什么使用它。暂时少写代码,多读书。
-
一般:数据使用 AES 加密,密钥使用 RSA 加密。 AES 加密和解密只有一个密钥,速度快且没有数据大小限制。 RSA 有两个密钥(一个用于加密,另一个用于解密),速度非常慢,并且数据大小限制小于密钥大小。
标签: java encryption aes rsa