将mcrypt 3DES ECB转换为openssle_encrpt



我正在将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;
}

从这里

mcrypt_module_open ( MCRYPT_3DES, '', 'ecb', '' )  == "DES-EDE3"

来自旧示例

1,md5密钥并转换为utf 8

2,添加PKCS7填充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正因为如此,这就是为什么摘录不同的结果?

谢谢希望高端开发人员能帮助我,谢谢

嗨,我以java为例:

function encrypt_it($data,$cipher_method,$secret_key){
$secret_key = md5($secret_key,true);
$result = openssl_encrypt($data, $cipher_method, $secret_key, $options=OPENSSL_RAW_DATA);
return base64_encode($result);
}

$cipher_method="des ede";

这是正确的

最新更新