php 3des 用openssl 代替 mcrypt

mcrypt实现方式 


function decrypt($key, $encrypted_data)
{
    $encrypted_data = hex2bin($encrypted_data);
    $td             = mcrypt_module_open('tripledes', '', 'ecb', '');
    $iv             = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
    $key            = substr($key, 0, mcrypt_enc_get_key_size($td));
    mcrypt_generic_init($td, $key, $iv);
    $decrypted_data = mdecrypt_generic($td, $encrypted_data);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);
    return $decrypted_data;
}

function encrypt($key, $decrypted_data)
{
    $td  = mcrypt_module_open('tripledes', '', 'ecb', '');
    $iv  = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
    $key = substr($key, 0, mcrypt_enc_get_key_size($td));
    mcrypt_generic_init($td, $key, $iv);
    $encrypted_data = mcrypt_generic($td, $decrypted_data);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);
    return bin2hex($encrypted_data);
}

 

openssl实现方式
 

function decrypt($key, $encrypted_data)
{
    $encrypted_data = hex2bin($encrypted_data);
    $output = openssl_decrypt($encrypted_data, 'DES-EDE3', $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING );
    return $output;
}


function pkcs5Pad($text)
{
    $pad = 8 - (strlen($text) % 8);
    return $text . str_repeat(chr($pad), $pad);
}

function encrypt ($key, $decrypted_data)
{
	$message_padded = pkcs5Pad($decrypted_data, 8);
	if (strlen($message_padded) % 8) {
	$message_padded = str_pad($message_padded,
	strlen($message_padded) + 8 - strlen($message_padded) % 8, "\0");
	}

    $output = openssl_encrypt($message_padded, 'DES-EDE3', $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING );
    return bin2hex($output);
}
 

参考资料:https://blog.csdn.net/buer2202/article/details/81363057

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值