我正在開發本地文件加密/解密軟件(AES-256 CBC), ,我想驗證解密是否成功。如何驗證AES解密是否成功?
所以決定明文數據的附加MD5哈希添加到普通數據的端部和它一起進行加密, 並且當解密,計算解密數據的MD5哈希(除了最後的附加MD5哈希值)和 與比較它最後一個額外的MD5散列。
我想知道這個想法是否安全使用。
這是一個壞主意嗎?
我正在開發本地文件加密/解密軟件(AES-256 CBC), ,我想驗證解密是否成功。如何驗證AES解密是否成功?
所以決定明文數據的附加MD5哈希添加到普通數據的端部和它一起進行加密, 並且當解密,計算解密數據的MD5哈希(除了最後的附加MD5哈希值)和 與比較它最後一個額外的MD5散列。
我想知道這個想法是否安全使用。
這是一個壞主意嗎?
您也可以使用MAC來驗證您的解密。 MAC和哈希碼之間的主要區別是概念性的。散列用於保證數據的完整性,MAC保證完整性和認證。
這意味着哈希碼是在沒有任何外部輸入的情況下從消息中盲目生成的:您獲得的東西可用於檢查消息在其傳輸期間是否有任何更改。
MAC代替使用私鑰作爲它生成代碼時使用的哈希函數的種子:這應該保證接收者不僅消息沒有被修改,而且發送它的人是我們的期望:否則攻擊者無法知道用於生成代碼的私鑰。
Cryptographic primitive | Hash | MAC | Digital
Security Goal | | | signature
------------------------+------+-----------+-------------
Integrity | Yes | Yes | Yes
Authentication | No | Yes | Yes
Non-repudiation | No | No | Yes
------------------------+------+-----------+-------------
Kind of keys | none | symmetric | asymmetric
| | keys | keys
MAC並不總是相同的。建議使用[encrypt-then-MAC](https://crypto.stackexchange.com/q/202/13022)。 –
*「MAC使用私鑰......」* - 我相信MAC通常使用共享密鑰,而不是私鑰。 *「一個MAC保證完整性和認證......」 - - 這不完全正確。由於雙方共享MAC密鑰,因此無法驗證消息的來源,因爲任何一方都可能產生該消息。 – jww
@jww我更喜歡術語「密鑰」或實際上是「共享密鑰」,但有時候也會使用術語「私鑰」。我認爲這是愚蠢的,因爲一個密鑰很難被共享*和*私有。你有一個觀點,但從某種意義上說,信息本身至少來自持有該密鑰的一方的身份。 –
我讀過許多文章,MD5不再安全了,但是,您將它用作校驗和而不是會話ID或密碼哈希值。如果攻擊MD5不是一個問題,因爲它在加密代碼中,並且它不被用作密碼散列,也不是會話ID或類似的,我認爲你可以使用它,但是如果你想要在用於SHA-2摘要的安全端更改MD5。
我投票結束這個問題,因爲這不是關於軟件開發,而是關於特定加密構造的安全性以驗證加密。 [crypto.se]更適合這種類型的問題,但它可能已經在那裏回答了 –
@ArtjomB。哦,我不知道那個網站存在。 thx – ooo0o
Stack Overflow是編程和開發問題的網站。這個問題似乎與題目無關,因爲它不涉及編程或開發。請參閱幫助中心的[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic)。也許[密碼學堆棧交換](http://crypto.stackexchange.com/)或[信息安全堆棧交換](http://security.stackexchange.com/)將是一個更好的地方要問。 – jww