我有一個使用 symfony 框架構建的舊 wordpress 插件,它使用mcrypt_get_block_size('tripledes', 'ecb'). 但是,我剛剛將服務器上的 php 升級到 7.3 版,現在我得到了一個Fatal error: Call to undefined function HealthShieldForm\mcrypt_encrypt().我讀過幾篇他們建議使用openssl_encrypt(). 不幸的是,我不知道從哪里開始用彼此替換功能并確保我得到相同的結果。我目前的代碼是這樣的:private function encrypt($data) { //Pad for PKCS7 $blockSize = mcrypt_get_block_size('tripledes', 'ecb'); $len = strlen($data); $pad = $blockSize - ($len % $blockSize); $data .= str_repeat(chr($pad), $pad); //Encrypt data $encData = mcrypt_encrypt('tripledes', $this->key, $data, 'ecb'); return base64_encode($encData); } private function decrypt($data) { $data = base64_decode($data); $data = mcrypt_decrypt('tripledes', $this->key, $data, 'ecb'); $block = mcrypt_get_block_size('tripledes', 'ecb'); $len = strlen($data); $pad = ord($data[$len - 1]); return substr($data, 0, strlen($data) - $pad); }更新我改編了彼得的例子來反映我的代碼:function encrypt($data) { $ciphertext = openssl_encrypt($data, 'des-ede3-ecb', $this->key, OPENSSL_RAW_DATA); return base64_encode($ciphertext); } function decrypt($data) { $ciphertext = base64_decode($data); $plaintext = openssl_decrypt($ciphertext, 'des-ede3-ecb', $this->key, OPENSSL_RAW_DATA); return $plaintext; }但是,現在我收到此錯誤: Warning: openssl_encrypt(): Unknown cipher algorithm
2 回答

繁星coding
TA貢獻1797條經驗 獲得超4個贊
您正在使用帶有 PKCS#5 / 7 填充的 ECB(未明確提及,但這是手動應用的填充)。該填充是 OpenSSL 的默認值,因此您只需使用'des-ede3'
withoutOPENSSL_RAW_DATA
和OPENSSL_ZERO_PADDING
as 選項。
我看到的唯一其他問題是密鑰是否太小或太大。在這種情況下,mcrypt lib 將填充零字節或修剪最右邊的字節。因此,如果加密/解密失敗,您可能需要自己執行此操作。
祝你好運,盡快擺脫這種可怕的協議和代碼。
- 2 回答
- 0 關注
- 450 瀏覽
添加回答
舉報
0/150
提交
取消