Encryption
這兩個加密函式怎麼可能產生相同的結果?
前段時間我在stackoverflow中打開了這篇文章,在那裡我解釋了一個問題,即我沒有找到一種方法可以成功獲得使用“aes-256-cbc-hmac-sha256”算法加密的字元串的結果。
如答案所示,加密的字元串與僅使用“aes-256-cbc”算法加密的字元串完全相同,我可以利用它成功地進行正確的解密。
出於好奇,我想知道這樣的事情是怎麼可能的。我對密碼學知之甚少,但一般來說,我知道算法中涉及的所有函式是如何工作的……而且,我絕不認為它們可以提供相同的結果,就像它發生的那樣。
為什麼這兩個不同的函式會產生完全相同的結果?
這是圖書館造成的問題。要麼完全跳過 HMAC 算法,要麼 - 更有可能 - 生成 HMAC 身份驗證標籤然後忘記。原因可能是在 OpenSSL 命令行和(可能)更高級別的函式中對經過身份驗證的密碼的處理參差不齊。該字元串被密碼類辨識,但簡單地忽略身份驗證標記輸出。
輸出是 64 個Base64字元,沒有填充字元,對應於 $ (64 / 4) * 3 = 48 $ 二進制密文。明文為 43 個字元/字節。密文不可能包含 32 字節(256 位,SHA-256 的輸出大小)的認證標籤。不,明文只是使用 PKCS#7 兼容填充額外填充了 5 個字節,然後加密……就是這樣。
很抱歉,這裡沒有發生加密魔法,只是加密庫的錯誤實現。對於任何 OpenSSL 開發人員:這應該不難解決,對吧?請將您測試過的字元串列入白名單。