Aes

AES(或其他):您可以將連接的加密消息作為一個解密嗎?

  • May 4, 2021

假設我有 20 條不同的加密消息。

使用 AES,如果我單獨解密 20 條消息中的每一條,我只會得到正確的輸出。

是否可以使用 AES 或其他方法將連接的 20 條消息上的解密函式作為一條消息呼叫並獲得連接的解密結果?

呼叫解密 20 次似乎效率低下。

(注意:我正在使用原始音頻進行此操作,有趣的是,當我一起解密 20 時,它聽起來像原始音頻,但有一些叮噹聲)——我想要沒有叮噹聲。

聲明“AES”不足以指定一些加密。AES 是分組密碼,而不是密碼。它在某些操作模式下使用。在這些當中

  • 沒有填充的ECB具有可以連接密文片段而無需解壓縮工件的期望屬性,但不安全,並且僅當明文是 AES 塊大小(16 字節)的精確倍數時才有效。
  • CBC 和 CFB 加上 IV 作為密文(這很常見)將完全按照報告的那樣做:“當我一起解密 20 個(連接的密文片段)時,它聽起來像原來的,但有一些叮噹聲”,因為 IV(可能還有一些填充前一個片段)被誤解為數據,並插入錯誤;
  • CTR 或 OFB 不會從錯誤中恢復,因此只有前 1/20 的音頻可以理解。
  • GCM 或其他認證模式不會輸出任何內容。

是否可以使用 AES 或其他方法將連接的 20 條消息上的解密函式作為一條消息呼叫並獲得連接的解密結果?

是的。需要對填充採取預防措施,但是如果現有的加密程序將數據拆分為 16 字節的倍數,則加密沒有任何改變。只需從輸出中刪除與插入的 IV 相對應的額外數據,也許還有填充。那隻是 19 個記憶體副本,超過 19/20 的數據。它可能會節省時間,也可能不會,這取決於離題的考慮。

對於填充,明文片段應按 16 字節的倍數對齊(最後一個字節除外)。

加密可以使用填充(就像大多數庫所做的那樣),但是應該要麼

  • 去除每個密文分片的最後 16 個字節,除了加入密文分片之前的最後一個字節;並在解密輸出中的 19 個分片邊界中的每一個刪除 16 個字節的 IV。
  • 刪除填充生成的 16 字節數據(從而刪除 19 個片段邊界中的每個邊界的 32 個字節:16 個用於填充前一個片段,16 個用於下一個片段的 IV)。

或者,可以在不填充的情況下進行加密,並手動用零填充最後一個純文字片段,這對於大多數壓縮音頻會被播放器刪除,而對於一些未壓縮的音頻則是靜音。

引用自:https://crypto.stackexchange.com/questions/89779