JavaScript的加密和解密用的是google的CryptoJS
库。
需要下载CryptoJS库,下载地址如下:https://github.com/sytelus/CryptoJS
AES算法详解:高级加密标准,它是一种对称加密算法,AES只有一个密钥,这个密钥既用来加密,也用于解密。
AES加密方式有五种:ECB, CBC, CTR, CFB, OFB
。
AES填充模式常用的有三种,分别是:NoPadding
, ZeroPadding
,PKCS7
,默认为PKCS7
。
从安全性角度推荐CBC
加密方法,本文介绍了CBC
,ECB
两种加密方法的Javascrip
实现。
CBC 和ECB模式的区别就是:
十六位的key
(密钥)和一个十六位iv
(偏移量)iv
,只需要key
(密钥)JS逆向时,AES加密的搜索关键词有AES
,mode
, padding
等。
加密js代码:
var CryptoJS = require("crypto-js");
var plaintext = '今天特大新闻是富士康有确诊病例!时间:2022-10-31' //加密前明文
var aes_key = "zhgerXHBVaaKm8xy"; // AES加密的key
var encryp_data = CryptoJS.AES.encrypt(plaintext, CryptoJS.enc.Utf8.parse(aes_key), {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}).toString()
console.log("加密后数据:", encryp_data)
解密js代码:
console.log("--------------------打印一个美丽的分割线--------------------")
var CryptoJS = require("crypto-js");
var aes_key = "zhgerXHBVaaKm8xy"; // AES加密的key
var data_text = "r/eiTPl52bif4KsJfR9oQ2ZNUdU/XHm2ZBBPI8nzmxOueNbEVCdmPzo0uWkI4U29"
var decrypt_text = CryptoJS.AES.decrypt(data_text, CryptoJS.enc.Utf8.parse(aes_key), {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8)
console.log("解密后数据:", decrypt_text)
运行结果:
加密js代码:
var CryptoJS = require("crypto-js");
var plaintext = "好吧!被你看见这篇文章了,这就是加密前数据。"; //加密前明文
var aes_key= "1234567890abcdef"; //加密key
var aes_iv = "abcdef1234567890"; //加密秘钥
// 加密-将秘钥和iv转换成Utf8字节数组
var encrypt_text = CryptoJS.AES.encrypt(plaintext, CryptoJS.enc.Utf8.parse(aes_key),
{
iv: CryptoJS.enc.Utf8.parse(aes_iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString();
console.log("AES加密后的数据:", encrypt_text)
解密js代码:
var CryptoJS = require("crypto-js");
var aes_key= "1234567890abcdef"; //加密key
var aes_iv = "abcdef1234567890"; //加密秘钥
var encrypt_text = "sqqa8ZkAXCbXSFqyVCZKjxMVjWMgNZc/Vjs9ofFTDNmZd9cI1AG3JyiGsYoT66UkaCHJefqvXT0LRF/txqKSAQc8lMp88Ai5VAbuVUu5nA8="
var decrypt_text = CryptoJS.AES.decrypt(encrypt_text, CryptoJS.enc.Utf8.parse(aes_key), {
iv: CryptoJS.enc.Utf8.parse(aes_iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8);
console.log("AES解密后的数据:", decrypt_text)
运行结果:
AES加密后的数据: sqqa8ZkAXCbXSFqyVCZKjxMVjWMgNZc/Vjs9ofFTDNmZd9cI1AG3JyiGsYoT66UkaCHJefqvXT0LRF/txqKSAQc8lMp88Ai5VAbuVUu5nA8=
AES解密后的数据: 好吧!被你看见这篇文章了,这就是加密前数据。
对称加密(加密解密密钥相同):DES
、DES3
、AES
非对称加密(分公钥私钥):RSA
信息摘要算法/签名算法:MD5
、HMAC
、SHA
前端实际使用中MD5
、AES
、RSA
,自定义加密函数使用频率是最高的
几种加密方式配合次序:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,用签名算法生成非对称加密的摘要
DES、DES3、AES、RSA、MD5、SHA、HMAC
传入的消息或者密钥都是bytes数据类型,不是bytes数据类型的需要先转换;密钥一般是8的倍数
Python实现RSA
中,在rsa库中带有生成签名和校对签名的方法
安全性:DES