【问题标题】:convert mcrypt 3DES ECB to openssle_encrpt将 mcrypt 3DES ECB 转换为 opensle_encrpt
【发布时间】: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


    【解决方案1】:

    您好,我遵循 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";

    这是正确的

    【讨论】:

      猜你喜欢
      • 2017-01-20
      • 2017-12-26
      • 2018-10-04
      • 2016-12-22
      • 1970-01-01
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      相关资源
      最近更新 更多