■html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>crypto-js</title>
</head>
<body>
<!-- <script type="text/javascript" src="http://cryptojs.altervista.org/api/functions_cryptography.js"></script> -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/pbkdf2.js"></script> -->
<script type="text/javascript">
//加密方法
function Encrypt(word) {
const key = CryptoJS.enc.Utf8.parse("A665F0F8E324C312"); //十六位十六进制数作为密钥
const iv = CryptoJS.enc.Utf8.parse('361277C7FE32269F'); //十六位十六进制数作为密钥偏移量
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return encrypted.ciphertext.toString().toUpperCase();
}
// let data = '3981916143776';
let data = '9378347342021';
//暗号化
// var encrypted = CryptoJS.AES.encrypt(data, "key128Bits500Iterations");
var encrypted = Encrypt(data)
console.log(encrypted.toString());
//36DA1D95E47A7B9155E1D9AAB2C83728
</script>
</body>
</html>
■node js端
const CryptoJS = require('crypto-js');
const key = CryptoJS.enc.Utf8.parse("A665F0F8E324C312"); //十六位十六进制数(0-9,A-F)作为密钥
const iv = CryptoJS.enc.Utf8.parse('361277C7FE32269F'); //十六位十六进制数作为密钥偏移量
function getRamNumber() {
var result = '';
for (var i = 0; i < 16; i++) {
result += Math.floor(Math.random() * 16).toString(16);//获取0-15并通过toString转16进制
}
//默认字母小写,手动转大写
return result.toUpperCase();//另toLowerCase()转小写
}
let key1 = getRamNumber();
console.log(`:${key1}`);
let iv1 = getRamNumber();
console.log(`:${iv1}`);
//解密方法
function Decrypt(word) {
let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}
//加密方法
function Encrypt(word) {
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return encrypted.ciphertext.toString().toUpperCase();
}
// let data = '9378347342021'
// console.log(`原始数据:${data}`);
// let strEncrypt = Encrypt(data);
// console.log(`加密数据:${strEncrypt}`);
// let strDecrypt = Decrypt(strEncrypt);
// console.log(`解密数据:${strDecrypt}`);
let strEncrypt = "36DA1D95E47A7B9155E1D9AAB2C83728";
let strDecrypt = Decrypt(strEncrypt);
console.log(`解密数据:${strDecrypt}`);
// // AES復号化ok
// let strEncrypt = "U2FsdGVkX1/4yHYLk5buQmqFLrx8UgSCWLDNoTnjfjE=";
// var strDecrypt = CryptoJS.AES.decrypt(strEncrypt, "key128Bits500Iterations");
// console.log(`解密数据:${strDecrypt.toString(CryptoJS.enc.Utf8)}`);
参考アドレス:http://www.webzsky.com/?p=1318