js 常用加密方法与技巧

// 内置函数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,
  1. npm -v 查看版本
  2. npm install crypto-js 安装库
  3. npm list 查看安装包
  4. 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=

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值