2015-08-25 296 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 ... –