//3des加密 OPENSSL_RAW_DATA 为Pkcs7填充模式
static function des_encrypt($data,$key = ENCRYPT_KEY, $iv = ENCRYPT_IV)
{
$key = md5($key); //32位长度
$iv = substr(md5($iv),0,8); //取前8位
$str = openssl_encrypt($data, 'des-ede3-cbc', $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($str);
}
//3des解密 OPENSSL_RAW_DATA 为Pkcs7填充模式
static function des_decrypt($data,$key = ENCRYPT_KEY, $iv = ENCRYPT_IV)
{
$data = base64_decode($data);
$key = md5($key); //32位长度
$iv = substr(md5($iv),0,8); //取前8位
$str = openssl_decrypt($data, 'des-ede3-cbc', $key, OPENSSL_RAW_DATA, $iv);
return ($str);
}
// 生成32位随机数;
static function generate_key( $length = 32 ) {
// 密码字符集,可任意添加你需要的字符
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$password = ”;
for ( $i = 0; $i < $length; $i++ )
{
// 这里提供两种字符获取方式
// 第一种是使用 substr 截取$chars中的任意一位字符;
// 第二种是取字符数组 $chars 的任意元素
// $password .= substr($chars, mt_rand(0, strlen($chars) – 1), 1);
$password .= $chars[ mt_rand(0, strlen($chars) - 1) ];
}
return $password;
}
客户端使用CryptoJS加密解密
import CryptoJS from 'crypto-js';
Vue.prototype.des_encrypt = function (str,key,iv){
var key = CryptoJS.MD5(key).toString();
var iv = CryptoJS.MD5(iv).toString();
var crypto_key = CryptoJS.enc.Utf8.parse(key);
var crypto_iv = CryptoJS.enc.Utf8.parse(iv.substr(0,8));
var encode_str = CryptoJS.TripleDES.encrypt(str, crypto_key, {
iv: crypto_iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encode_str.toString();
}
调用
加密
that.des_encrypt('你好!!!!','AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA','1234567812345678')
解密
that.des_decrypt('密文','AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA','1234567812345678')