javascript的CryptoJS TripleDES加密算法,利用Php的mcrypt_decrypt也可以实现。搜索了很久,终于找到可用方法,防止忘记,特记录一下。具体代码如下:
js代码:
//加密
function TripleDESByEBCEncrypt(data, key)
{
var secret = CryptoJS.enc.Utf8.parse(key);// 秘钥
var encode_str = CryptoJS.TripleDES.encrypt(data,secret,
{
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}).toString();
return encode_str;
}
对应的PHP等价代码:
//加密
function TripleDESByEBCEncrypt($data, $key)
{
//Pad for PKCS7
$blockSize = mcrypt_get_block_size('tripledes', 'ecb');
$len = strlen($data);
$pad = $blockSize - ($len % $blockSize);
$data .= str_repeat(chr($pad), $pad);
//Encrypt data
$encData = mcrypt_encrypt('tripledes', $key, $data, 'ecb');
return base64_encode($encData);
}
//echo TripleDESByEBCEncrypt("data", "f9b08f4246f4981a7964eb74");
//解密
function TripleDESByEBCDecrypt($data, $key)
{
$decData = mcrypt_decrypt('tripledes', $key, base64_decode($data), 'ecb');
$decData=trim($decData);
$dec_s = strlen($decData);
$padding = ord($decData[$dec_s-1]);
$decData = substr($decData, 0, -$padding);
return $decData;
}
//echo TripleDESByEBCDecrypt("RvZ5zOWsnQY=", "f9b08f4246f4981a7964eb74");
补充说明
- js中,CryptoJS.enc.Utf8.parse对原始字符的处理,PHP无需理会,直接使用原始字符
- js中,CryptoJS.enc.Hex.parse对字符的处理,PHP则需要对原始字符进行pack('H*',$hex_str)处理