這裏的理論不僅適用於PHP,也適用於更多語言。加密:測試字符串是否被正確解密?
假設我使用mcrypt
庫和AES-256
密碼加密字符串。加密的字符串現在看起來類似於þøÆ{」ò(ü´îÚÜÇW¹ËŸK¯L‘rø?ª¶!JF£º+Œ’Ú'‚
。
如果加密密鑰在解密和加密事件之間改變,解密的結果顯然是毫無價值的。
由於加密的字符串至少包含我自己的隨機字符,所以對其進行某種測試並不容易,以確保它處於加密/解密狀態。
我花了一些時間思考。 我如何測試一個字符串已被正確解密?
如果我在首先對原始字符串進行加密之前附加了一個小前綴,然後在解密時刪除此前綴,該怎麼辦?如果未找到該前綴,則說解密失敗是安全的。
這是處理這個問題的適當方法嗎?
你可以包括你的明文的散列(如sha-1)而不是簡單的前綴。這樣你就可以把完整性檢查作爲獎勵。 – CodesInChaos 2011-02-22 19:03:32
@Code這是一個好主意。散列必須後跟一個定義的字符來標記邊界 – 2011-02-22 19:09:09
關於你的方法,如果你能找到一個字符串$ a,那麼對於每個可能的字符串$ b,$ a的編碼都是安全的。 $ b永遠不會以$ a開始。 – greg0ire 2011-02-22 19:09:56