crypto-js aes暗号化・復号方式

■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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值