Mcrypt 與 OpenSSL 的相容性是一個有爭議的問題。一些消息來源聲稱 OpenSSL 無法解密使用 Mcrypt 加密的數據,而另一些消息來源則表明使用填充是可能的。
[貼文 1](https://stackoverflow.com/a/19748494/ 5834657) 指出解密是不可能的,而[貼文2](https://stackoverflow.com/a/31614770/5834657)顯示使用正確的填充是可以實現的。然而,貼文中提供的範例填充是專門針對 Mcrypt 的,可能不適用於 OpenSSL。
為了測試相容性,我們將現有的 Mcrypt 程式碼修改為使用 OpenSSL。修改後的解密函數如下:
public function decrypt($data, $key) { $salt = substr($data, 0, 128); $enc = substr($data, 128, -64); $mac = substr($data, -64); list ($cipherKey, $macKey, $iv) = $this->getKeys($salt, $key); if ($mac !== hash_hmac('sha512', $enc, $macKey, true)) { return false; } $dec = openssl_decrypt($enc, $this->cipher, $cipherKey, OPENSSL_RAW_DATA, $iv); $data = $this->unpad($dec); return $data; }
我們透過使用 Mcrypt 函式庫加密字串,然後嘗試使用基於 OpenSSL 的程式碼對其進行解密來測試此修改後的程式碼。然而,我們只收到了空白的回覆。該錯誤似乎源自於 $data = $this->unpad($dec) 行。當我們註解掉這一行時,我們得到了一個類似於原始加密格式的混亂字串。
不幸的是,我們嘗試使用 OpenSSL 解密 Mcrypt 加密資料並不成功。 Mcrypt 使用的特定填充可能與 OpenSSL 不相容,或者可能存在其他潛在的不相容性導致無法成功解密。
需要進一步調查以確定是否真的無法解密 Mcrypt 加密的內容使用 OpenSSL 的數據,或者是否有尚未發現的解決方法。
以上是OpenSSL 可以解密使用 Mcrypt 加密的資料嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!