// 内置函数btoa 加密
var value = 'hello'
console.log(btoa(value))
输出base64 编码:aGVsbG8=
// 内置函数atob 解码
var value = 'aGVsbG8='
console.log(atob(value))
输出base64 解码:hello
中文编码
var string = "Hello, 中国!";
//"SGVsbG8lMkMlMjAlRTQlQjglQUQlRTUlOUIlQkQlRUYlQkMlODE="
var encodedString = btoa(encodeURIComponent(string));
var decodedString = decodeURIComponent(atob(encodedString));
console.log(decodedString); //"Hello, 中国!"
借用第三方库实现,例如CrptoJs,
- npm -v 查看版本
- npm install crypto-js 安装库
- npm list 查看安装包
- node x.js 执行文件
var CryptoJs = require("crypto-js");
let value = "hello";
let trans = CryptoJS.enc.Utf8.parse(value);
let encrypted = CryptoJS.enc.Base64.stringify(trans);
console.log(encrypted)
输出: aGVsbG8=
JSON 对象转换
// 将对象转换成字符串,output:{"user":"asd","pass":"123"}
var param = {
"user":"asd",
"pass":"123"
};
console.log(Json.stringify(param))
// 将字符串转换为对象
var param = var param = '{"username":"123","pass":"1231"}';
console.log(JSON.parse(param))
判断数据类型 output: [object Array]
var arr = [1,3,4]
console.log(toString.call(arr));
return返回多个值,最终只返回最后一个值 output: 3
function fist() {
var fist = '1';
return fist
}
function two() {
var two = '2';
return two
}
function three() {
var three = '3';
return three
}
function run() {
return fist(),two(),three()
}
注意: 返回多个值 时 return [fist(),two(),three()] output: ['1', '2', '3']
apply 重定义指定对象,参数用数组传递
// output: zq-23-china-cd
var person = {
info: function (city, country) {
return this.name + '-' + this.age + '-' + country + '-' + city;
}
};
var person1 = {
"name" : "zq",
"age":"23"
};
console.log(person.info.apply(person1,['cd','china']));
call, 重定义指定对象,可以直接传参
//output: zq-23-china-cd
var person = {
info: function (city, country) {
return this.name + '-' + this.age + '-' + country + '-' + city;
}
};
var person1 = {
"name" : "zq",
"age":"23"
};
console.log(person.info.call(person1,'cd','china'));
AES加密 、解密
const CryptoJS = require("crypto-js");
// 带加密字符串
var value = '123456';
// 密钥 16 位
var secret_value = 'af25-87hk-a35v-5';
// 初始向量 initial vector 16 位
var iv_value = 'af25-87hk-a35v-5';
// 密钥和向量处理
var secret = CryptoJS.enc.Utf8.parse(secret_value);
var iv = CryptoJS.enc.Utf8.parse(iv_value);
// 加密
var encrypted = CryptoJS.AES.encrypt(value,secret,
{iv: iv,
// mode 支持 CBC、CFB、CTR、ECB、OFB、默认CBC
mode: CryptoJS.mode.CBC,
// NoPadding、ZeroPadding, 默认PKcs7,即 PKcs5
padding: CryptoJS.pad.Pkcs7});
// 将加密结果转换字符串
encrypted = encrypted.toString();
// 解密,传入密文、密钥和向量并设置加密与填充模式
var decrypted = CryptoJS.AES.decrypt(encrypted,secret,{
iv: iv,
// mode 支持 CBC、CFB、CTR、ECB、OFB、默认CBC
mode: CryptoJS.mode.CBC,
// NoPadding、ZeroPadding, 默认PKcs7,即 PKcs5
padding: CryptoJS.pad.Pkcs7
});
// 将解密结果转换为utf8 字符串
decrypted = CryptoJS.enc.Utf8.stringify(decrypted);
/*
打印明文、密文和解密结果*/
console.log(value); // 123456
console.log(encrypted); // xLilCRGWQ/CGqBUVya+4LQ==
console.log(decrypted); //123456
Base64 加密、解密
const CryptoJS = require("crypto-js");
// 编码
var value = 'www.baidu.com';
var trans = CryptoJS.enc.Utf8.parse(value);
var encrypted = CryptoJS.enc.Base64.stringify(trans);
// 解码
var trans_encrypted = CryptoJS.enc.Base64.parse(encrypted);
var decrypted = trans_encrypted.toString(CryptoJS.enc.Utf8);
// 打印明文、编码结果和解码结果
console.log(value); // www.baidu.com
console.log(encrypted); // d3d3LmJhaWR1LmNvbQ==
console.log(decrypted);// www.baidu.com
MD5 编码
const CryptoJS = require("crypto-js");
// 编码
var value = 'www.baidu.com';
var encrypted = CryptoJS.MD5(value);
console.log(encrypted.toString()); // dab19e82e1f9a681ee73346d3e7a575e
Hash 编码
const CryptoJS = require("crypto-js");
// 编码
var value = 'www.baidu.com';
// 加密可切换
var hash = CryptoJS.SHA256(value);
//
console.log(value); // www.baidu.com
console.log(hash.toString()); // 结果与 CryptoJS.enc.Hex 相同
console.log(hash.toString(CryptoJS.enc.Hex)); // eceb28b70500b741f3baaea651c6ec8298631ac1b3bf401bcdd1527b4a48ad0c
console.log(hash.toString(CryptoJS.enc.Base64)); // 7OsotwUAt0Hzuq6mUcbsgphjGsGzv0AbzdFSe0pIrQw=