2015-08-25 192 views
0

只是一个问题,如果我的方式做到这一点是可以的。 我在java中制作了一个文件保护程序,我使用随机生成的AES密钥并使用它加密文件。 AES密钥将使用RSA进行加密,并且还会随随机IV一起存储在outpu文件中。 解密时,我读取前n个字节(在我的情况下是256byte),并用我的私有RSA密钥解密,然后用AES密钥解密文件的其余部分。RSA加密 - 解密AES密钥并存储在文件

我的主要问题是可以将加密的AES密钥包含在加密文件中吗?这对我来说似乎很舒服,因为我加密的每个文件都有自己的随机密钥,包括使用RSA密钥加密的密钥。 这是不好的做法?

+0

这是一个简单的总结,例如,PGP是如何工作的。这一切都取决于你的实施。例如,你对RSA加密过程如何? –

+1

这很好。这可能是低效的,取决于您拥有多少个文件,您如何分发这些文件以及收件人是谁。 –

+0

@BoristheSpider:KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); \t \t kpg.initialize(2048); \t \t KeyPair kp = kpg.genKeyPair();它的默认使用填充pkcs1我认为。 –

回答

1

AES的执行速度比RSA快(对于相同的密钥大小)。
所以,你可以创建一个结构类似波纹管....

------------------------------------------------ 
|  |          | 
| IV | Your encrypted data     | 
|  |          | 
------------------------------------------------ 

您可以IV存储与您的加密数据。
可以说你的IV是20字节大小的字节[],而不是用加密数据存储它。
当你想解密数据时,首先要从数组中获得最初的20个字节,而其余的数据则是你的加密数据。
而且你知道IV的大小......所以你可以轻松地从整个数据(IV + EncryptedData)中离开IV和加密数据。

以上不是您的问题的确切解决方案。
但你可以使用上面的一个......

+0

亲爱的zaph ...对于相同的密钥大小...只是考虑AES-128和RSA-4096的执行速度......没关系吗?...... –

+0

是的......所以我们应该使用RSA密钥只加密AES密钥类型信息和客户端和服务器之间的交换..导致RSA的比特尺寸增加将带有自己的成本... –

+0

我相信是...我已经在相同密钥大小的基础上比较了两种算法。 。因为如果大小不同于更多大小的RSA将需要更多的时间执行......所以我在我的答案中提到了那部分......现在我期待着从你身边得到upvote ... –