конвертировать mcrypt 3DES ECB в openssle_encrpt - PullRequest
0 голосов
/ 11 марта 2020

Я конвертирую 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, добавление PKCS7Padding openssl уже выполняет заполнение PKCS # 7 (поэтому я не добавляю)

перед его функцией my

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 из-за этого, поэтому зачем шифровать другой результат?

Спасибо, надеюсь, разработчик высокого класса может помочь мне, спасибо

1 Ответ

0 голосов
/ 12 марта 2020

Привет, я следую примеру 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";

это правильный

...