1. 杨乐多博客首页
  2. 技术杂谈
  3. PHP

PHP DES加密解密

最近需要与第三方平台做数据对接,实现方式是调用对方接口地址,双方通过同一个密钥进行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);
}

重点来了哟,不要离开,继续往下看……
由于 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);
}

参考文献
PHP 7.1.x 中废弃mcrypt
通过OpenSSL实现加密解密

原创文章,作者:iConan,如若转载,请注明出处:https://www.aspyc.com/archives/713.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据