2016-05-10 37 views
0

我使用的Blowfish java的加密,而不填充在序列來加密文件:刪除額外的字節從解密的文件

  • 生成會話密鑰
  • 準備文件頭(算法,密鑰長度,模式,具有加密的會話密鑰RSA公鑰)與會話密鑰

逆解密

  • 加密文件。

    我以大小=原始文件大小+一些額外的字節(數量根據原始文件大小,塊大小等)解密的文件結束。 我如何使解密的文件大小=原始。顯然,我必須減少額外的字節數,但是我怎樣才能識別出其中有多少人沒有關於原始文件大小的知識。

    編輯。我正在使用流密碼。沒有填充和河豚是必須的,因爲它是一個學校項目。

  • +0

    使用填充?將大小放在標題中? –

    +0

    我想在有人插入錯誤密碼時生成worng解密文件,所以我無法使用填充。此外,在我的項目中包含文件大小是禁止的 –

    +0

    如果要檢測不正確的解密密鑰,則需要向加密數據添加身份驗證,通常使用加密數據前面的MAC。解密本身不能確定不正確的解密。 – zaph

    回答

    0

    河豚是塊密碼,所以它壓縮塊。它的塊大小是64位。如果你試圖加密65位(不管你有沒有明確選擇填充),加密的大小將是128位。

    如果您想要加密的文本是65位,您必須使用流密碼。

    +0

    流密碼很難得到正確,填充是通常的解決方案。 – zaph

    +0

    如果您跳過手動設置填充,則會自動應用零填充 – joro

    +0

    編輯後的更新 –

    0

    爲了避免填充像Blowfish這樣的塊密碼,使用計數器模式(CTR)。這有效地將分組密碼轉換爲流密碼。您只需丟棄生成的字節流的最後一部分,而不是填充,因此您的密文長度與原始明文的長度相同。

    你也可以檢查你的密碼文件沒有在前面添加東西,比如Nonce。這會延長密碼文件的效果。

    如前所述,河豚不是一個好的選擇。使用AES代替,或者其中一個密碼是你想要的實際流密碼。