最近需要与第三方平台做数据对接,实现方式是调用对方接口地址,双方通过同一个密钥进行DES加密解密,保证接口请求合法与数据完整性。
我们知道可以通过 mcrypt 扩展函数来实现,示例代码如下:
/**
* des-ecb加密
* @param string $data 要被加密的数据
* @param string $key 加密密钥
*/
function encrypt($str, $key)
{
$block = mcrypt_get_block_size('des', 'ecb');
$pad = $block - (strlen($str) % $block);
$str .= str_repeat(chr($pad), $pad);
return mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
}
/**
* des-ecb解密
* @param string $data 加密数据
* @param string $key 加密密钥
*/
function decrypt($str, $key)
{
$str = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
$block = mcrypt_get_block_size('des', 'ecb');
$pad = ord($str[($len = strlen($str)) - 1]);
return substr($str, 0, strlen($str) - $pad);
}
* des-ecb加密
* @param string $data 要被加密的数据
* @param string $key 加密密钥
*/
function encrypt($str, $key)
{
$block = mcrypt_get_block_size('des', 'ecb');
$pad = $block - (strlen($str) % $block);
$str .= str_repeat(chr($pad), $pad);
return mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
}
/**
* des-ecb解密
* @param string $data 加密数据
* @param string $key 加密密钥
*/
function decrypt($str, $key)
{
$str = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
$block = mcrypt_get_block_size('des', 'ecb');
$pad = ord($str[($len = strlen($str)) - 1]);
return substr($str, 0, strlen($str) - $pad);
}
重点来了哟,不要离开,继续往下看……
由于 mcrypt 扩展已经存在了大约10年,并且用起来很复杂。因此它在PHP 7.1.x 中被废弃并且被 OpenSSL 所取代,从PHP 7.2起它将被从核心代码中移除并且移到PECL中。 通过OpenSSL实现des加密解密示例代码如下:
/**
* des-ecb加密
* @param string $data 要被加密的数据
* @param string $key 加密密钥
*/
function des_ecb_encrypt($data, $key){
return openssl_encrypt($data, 'des-ecb', $key);
}
/**
* des-ecb解密
* @param string $data 加密数据
* @param string $key 加密密钥
*/
function des_ecb_decrypt($data, $key){
return openssl_decrypt($data, 'des-ecb', $key);
}
/**
* des-cbc加密
* @param string $data 要被加密的数据
* @param string $key 加密使用的key
* @param string $iv 初始向量
*/
function des_cbc_encrypt($data, $key, $iv){
return openssl_encrypt($data, 'des-cbc', $key, 0, $iv);
}
/**
* des-cbc解密
* @param string $data 加密数据
* @param string $key 加密使用的key
* @param string $iv 初始向量
*/
function des_cbc_decrypt($data, $key, $iv){
return openssl_decrypt($data, 'des-cbc', $key, 0, $iv);
}
* des-ecb加密
* @param string $data 要被加密的数据
* @param string $key 加密密钥
*/
function des_ecb_encrypt($data, $key){
return openssl_encrypt($data, 'des-ecb', $key);
}
/**
* des-ecb解密
* @param string $data 加密数据
* @param string $key 加密密钥
*/
function des_ecb_decrypt($data, $key){
return openssl_decrypt($data, 'des-ecb', $key);
}
/**
* des-cbc加密
* @param string $data 要被加密的数据
* @param string $key 加密使用的key
* @param string $iv 初始向量
*/
function des_cbc_encrypt($data, $key, $iv){
return openssl_encrypt($data, 'des-cbc', $key, 0, $iv);
}
/**
* des-cbc解密
* @param string $data 加密数据
* @param string $key 加密使用的key
* @param string $iv 初始向量
*/
function des_cbc_decrypt($data, $key, $iv){
return openssl_decrypt($data, 'des-cbc', $key, 0, $iv);
}
参考文献
PHP 7.1.x 中废弃mcrypt
通过OpenSSL实现加密解密
原创文章,作者:iConan,如若转载,请注明出处:https://www.aspyc.com/archives/713.html