将我的加密库从 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中文网其他相关文章!