亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是 mcrypt_get_block 替代方案以及如何使用它

什么是 mcrypt_get_block 替代方案以及如何使用它

PHP
大話西游666 2021-07-13 17:01:44
我有一個使用 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_DATAOPENSSL_ZERO_PADDINGas 選項。

我看到的唯一其他問題是密鑰是否太小或太大。在這種情況下,mcrypt lib 將填充零字節或修剪最右邊的字節。因此,如果加密/解密失敗,您可能需要自己執行此操作。

祝你好運,盡快擺脫這種可怕的協議和代碼。


查看完整回答
反對 回復 2021-07-16
  • 2 回答
  • 0 關注
  • 450 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號