首頁 >後端開發 >php教程 >OpenSSL 可以解密使用 Mcrypt 加密的資料嗎?

OpenSSL 可以解密使用 Mcrypt 加密的資料嗎?

Patricia Arquette
Patricia Arquette原創
2024-12-02 04:08:151005瀏覽

Can OpenSSL Decrypt Data Encrypted with Mcrypt?

將我的加密庫從 Mcrypt 升級到 OpenSSL

可以完成嗎?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn