数组加密,Utf8编码,传递,加解密
var CryptoJS = require('crypto-js'); // 引入
var data = [{id: 1}, {id: 2}]; // 数组
var enc = CryptoJS.AES.encrypt(JSON.stringify(data), "Secret Passphrase");
console.log(enc.toString()); // toString() 默认转hex 16进制
var dec = CryptoJS.AES.decrypt(enc, "Secret Passphrase");
console.log(JSON.parse(dec.toString(CryptoJS.enc.Utf8))); // 解密,字符转json
加密,Base64编码,传递,解密
var s = 'Hello World';
// 加密
var enc = CryptoJS.AES.encrypt( // AES 算法
CryptoJS.enc.Utf8.parse(s), CryptoJS.enc.Utf8.parse(key), // 内容,key
{
iv: CryptoJS.enc.Utf8.parse(iv),
mode: CryptoJS.mode.CBC, // 模式
padding: CryptoJS.pad.NoPadding // 填充(默认 CryptoJS.pad.Pkcs7),不使用填充
}
); // 内容,key,iv 最好都转Utf8,保证数据正确
var b64 = CryptoJS.enc.Base64.stringify(enc.ciphertext); // *.ciphertext 加密内容,转字符串
// 解密
var dec = CryptoJS.AES.decrypt(
CryptoJS.enc.Base64.parse(enc), CryptoJS.enc.Utf8.parse(key),
{
iv: CryptoJS.enc.Utf8.parse(iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.NoPadding
}
);
console.log(dec.toString(CryptoJS.enc.Utf8)); // Hello World,转Utf8 字符串输出
引用PHP 和 Web 端对称加密传输|JSEncrypt|CryptoJS
引用分组密码工作模式
模式
- PKCS7 填充字符串由一个字节序列组成,每个字节填充该字节序列的长度。
假定块长度为 8,数据长度为 9,
数据: FF FF FF FF FF FF FF FF. FF
填充: FF FF FF FF FF FF FF FF. FF 07 07 07 07 07 07 07,如果恰好8个字节时还要补8个字节的0x08,可以让解密的数据很确定无误的移除多余的字节。
PKCS5Padding 和 PKCS7Padding 在这方面是类似的。
- 不同点在于,选择算法的时候如果选用 PKCS5Padding 填充模式,就是明确指定块大小是 8 个字节。
- 选用 PKCS7Padding 则是没有明确指定块大小。如果选择算法的时候选用 PKCS7Padding 填充模式,同时设置块大小为 8 字节,和选用 PKCS5Padding 填充模式,没有设置块大小(实际已经设置了 8 字节),这两种情况下,两种填充模式没有区别。另外有个值得注意的是,AES 中块大小是固定 16 字节。
网友评论