將我的加密庫從 Mcrypt 升級到 OpenSSL
我可以將我的加密庫從 Mcrypt 升級到 OpenSSL 嗎?在OpenSSL中,是否可以解密使用Mcrypt加密的資料?兩個不同的帖子提供了相互衝突的資訊。
問題:是否可以將我的加密庫從 Mcrypt 升級到 OpenSSL?如果是的話,如何實現?
答案:是的,可以將您的加密庫從 Mcrypt 升級到 OpenSSL。
問題:我可以嗎使用 OpenSSL 解密 Mcrypt 加密的資料?
答案:是的,可以使用 OpenSSL 解密使用 Mcrypt 加密的資料。
以下代碼示例說明如何使用OpenSSL 解密使用Mcrypt 加密的數據:
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); return $dec; }
附加說明:
測試:
以下程式碼可用來測試decrypt()函數:
$keys = [ 'this is a secret key.', 'G906m70p(IhzA5T&5x7(w0%a631)u)%D6E79cIYJQ!iP2U(xT13q6)tJ6gZ3D2wi&0")7cP5', chr(6) . chr(200) . chr(16) . 'my key ' . chr(3) . chr(4) . chr(192) . chr(254) . ' zyx0987!!', 'and finally one more key to test with here:', ]; $data = [ 'A', 'This is a test', 'now test encrypting something a little bit longer with 1234567890.', '$length = mcrypt_get_block_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC); $last = ord($data[strlen($data) - 1]);', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sit amet pharetra urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut fringilla, quam sed eleifend eleifend, justo turpis consectetur tellus, quis tristique eros erat at nibh. Nunc dictum neque vel diam molestie fermentum. Pellentesque dignissim dui quis tortor eleifend, ut maximus elit egestas. Donec posuere odio et auctor porta. Quisque placerat condimentum maximus. Curabitur luctus dolor eget sem luctus, in dignissim tortor venenatis. Mauris eget nulla nisl.', ]; $failures = 0; foreach ($data as $datum) { foreach ($keys as $key) { $enc = new Encryption(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC); $encrypted = $enc->encrypt($datum, $key); $dec = new EncryptionOpenSsl('bf-cbc'); $decrypted = $dec->decrypt($encrypted, $key); if (strcmp($datum, $decrypted) !== 0) { echo "Encryption with key '$key' of '$datum' failed. '$decrypted' != '$datum'<br><br>\n\n"; $failures++; } } } if ($failures) { echo "$failures tests failed.<br>\n"; } else { echo "ALL OKAY<br>\n"; }
以上是我可以將加密從 Mcrypt 遷移到 OpenSSL,並使用 OpenSSL 解密 Mcrypt 加密的資料嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!