PHP中对称加密openssl里边加密函数openssl_encrypt()和解密函数openssl_decrypt()进行特殊字符时会导致加密解密失败,可以通过特殊字符处理进行解决。
PHP中DES对称加密openssl里边加密函数openssl_encrypt()和解密函数openssl_decrypt()进行特殊字符时会导致加密解密失败,可以通过特殊字符替换和补位解决。
简单示例如下:
/**
* 字符串加密、解密示例
*/
// 加密密钥
$key = 'abcabc';
/** 加密 **/
$str = '越加网+_/=yj21.com';
$enStr = encrypt($str, $key);
echo $enStr;
//输出:kjmOeyY0q9YN9I4iBlykWHZHYoy6_gEX541-iDb-3Lo
echo '<br>';
/** 解密 **/
$deStr = decrypt($enStr, $key);
echo $deStr;
//输出:越加网+_/=yj21.com
封装的加密解密函数:
/**
* Notes: 字符串-加密
* Desc: 兼容字符串特殊字符加密
*/
function encrypt($string, $key){
$string = base64_encode(openssl_encrypt($string, 'AES-128-ECB', $key, OPENSSL_RAW_DATA ));
return rtrim(strtr($string, '+/', '-_'), '=');
}
/**
* Notes: 字符串-解密
* Desc: 兼容字符串特殊字符解密
*/
function decrypt($string, $key){
$string = str_pad(strtr($string, '-_', '+/'), strlen($string) % 4, '=', STR_PAD_RIGHT);
return openssl_decrypt(base64_decode($string), 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
}