php
1.需要开启openssl扩展
2.注:php 的 mcrypt_ 函数簇在 7.1.0 版本中开始 deprecated,并在 7.2.0 版本中彻底废弃。其实在 2015 就已经开始建议大家使用 openssl_encrypt/openssl_decrypt 来代替 mcrypt_encrypt/mcrypt_decrypt,缓冲了 N 久,这一天终于在 7.2.0 版本上到来了。
openssl_decrypt 的 OPENSSL_ZERO_PADDING默认会补零到16位
aes-128-cbc: 表示16位的
method 长度的问题,密码学方式我们用的最多的有两种,AES-128-CBC 与?AES-256-CBC
上节我们讲过字符串的长度问题
1 bit 位 = 1 二进制数据
1 byte 字节 = 8 bit
1 字母 = 1 byte = 8 bit
128位/8=16字节=16字符
192位/8=24字节=24字符
256位/8=32字节=32字符
也就是说KEY?的长度是根据AES-128-CBC 与?AES-256-CBC?变换的。使用?AES-128-CBC 时,key的长度应该为16位,使用?AES-256-CBC时,key的长度应该为32位。
public static function opensslDecrypt($data = '')
{
if (empty($data) || !is_string($data)) {
return $data;
}
$method = 'aes-128-cbc';
$privateKey = 'F79JF2tNdHLW4bid'; //todo
$iv = 'bk4h1mv84RCOdyn2'; //todo
$res = '';
if ($decrypt = openssl_decrypt($data, $method, $privateKey, OPENSSL_ZERO_PADDING, $iv)) {
$res = rtrim($decrypt, "\0");
// 或者 $cleaned = strval(str_replace("\0", "", $password));
}
return $res;
}
js
cryptojs:下载地址 https://code.google.com/archive/p/crypto-js/downloads cryptojs:文档说明 CryptoJS - CryptoJS
cryptojs:在线调试工具 在线加密解密
<!-- 加密js-->
<script src="__STATIC__/common/js/crypto/rollups/aes.js"></script>
<script src="__STATIC__/common/js/crypto/components/pad-zeropadding.js"></script>
/**
* 加密
*/
function doEncrypt(data) {
if (data == '' || data == undefined) {
return data;
}
let key = CryptoJS.enc.Latin1.parse('F79JF2tNdHLW4bid');
let iv = CryptoJS.enc.Latin1.parse('bk4h1mv84RCOdyn2');
//加密
return CryptoJS.AES.encrypt(data, key, {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding});
}
|