我使用的Blowfish java的加密,而不填充在序列來加密文件:刪除額外的字節從解密的文件
- 生成會話密鑰
- 準備文件頭(算法,密鑰長度,模式,具有加密的會話密鑰RSA公鑰)與會話密鑰
逆解密
我以大小=原始文件大小+一些額外的字節(數量根據原始文件大小,塊大小等)解密的文件結束。 我如何使解密的文件大小=原始。顯然,我必須減少額外的字節數,但是我怎樣才能識別出其中有多少人沒有關於原始文件大小的知識。
編輯。我正在使用流密碼。沒有填充和河豚是必須的,因爲它是一個學校項目。
我使用的Blowfish java的加密,而不填充在序列來加密文件:刪除額外的字節從解密的文件
逆解密
我以大小=原始文件大小+一些額外的字節(數量根據原始文件大小,塊大小等)解密的文件結束。 我如何使解密的文件大小=原始。顯然,我必須減少額外的字節數,但是我怎樣才能識別出其中有多少人沒有關於原始文件大小的知識。
編輯。我正在使用流密碼。沒有填充和河豚是必須的,因爲它是一個學校項目。
爲了避免填充像Blowfish這樣的塊密碼,使用計數器模式(CTR)。這有效地將分組密碼轉換爲流密碼。您只需丟棄生成的字節流的最後一部分,而不是填充,因此您的密文長度與原始明文的長度相同。
你也可以檢查你的密碼文件沒有在前面添加東西,比如Nonce。這會延長密碼文件的效果。
如前所述,河豚不是一個好的選擇。使用AES代替,或者其中一個密碼是你想要的實際流密碼。
使用填充?將大小放在標題中? –
我想在有人插入錯誤密碼時生成worng解密文件,所以我無法使用填充。此外,在我的項目中包含文件大小是禁止的 –
如果要檢測不正確的解密密鑰,則需要向加密數據添加身份驗證,通常使用加密數據前面的MAC。解密本身不能確定不正確的解密。 – zaph