【发布时间】:2020-06-23 02:23:34
【问题描述】:
我正在将 MCRYPT ECB 转换为打开 SSL ECB
MCRYPT 函数
public function encrypt($input) {
$vi = base64_decode($this->iv);
$key = mb_convert_encoding($this->key, "UTF8");
$key = md5($key,true);
$key = $this->processKey($key);
$input = $this->addPKCS7Padding($input);
$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
mcrypt_generic_init($td, $key, $vi);
$data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$data = base64_encode($data);
return $data;
}
private function processKey($key) {
// Complete the key
$key_add = 24 - strlen($key);
$key .= substr($key, 0, $key_add);
// Padding the text
$text_add = strlen($text)%8;
for ($i=$text_add; $i<8; $i++){
$text .= chr(8-$text_add);
}
return $key;
}
private function addPKCS7Padding($source) {
$block = mcrypt_get_block_size('tripledes', 'cbc');
$pad = $block - (strlen($source) % $block);
if ($pad <= $block) {
$char = chr($pad);
$source .= str_repeat($char, $pad);
}
return $source;
}
来自here
mcrypt_module_open ( MCRYPT_3DES, '', 'ecb', '' ) == "DES-EDE3"
来自旧示例
1、md5为key并转成utf 8
2,添加 PKCS7Padding openssl 已经做了 PKCS#7 填充(所以我不添加)
在我的功能之前
function encry_it($data,$cipher_method,$secret_key ,$iv){
$secret_key = md5(utf8_encode($secret_key), true);
$result = openssl_encrypt($data, $cipher_method, $secret_key, $options=OPENSSL_RAW_DATA);
return base64_encode($result);
}
加密结果不同 我不能将 IV 添加到 openssl 函数,因为它的错误说这个 DES-EDE3 期望 0 IV 正因为如此,这就是为什么 encrpt 不同的结果?
谢谢 希望高端开发者可以帮助我谢谢
【问题讨论】:
标签: php encryption openssl 3des block-cipher