Javascript实现AES算法

JavaScript的加密和解密用的是googleCryptoJS库。

需要下载CryptoJS库,下载地址如下:https://github.com/sytelus/CryptoJS

AES算法

AES算法详解:高级加密标准,它是一种对称加密算法,AES只有一个密钥,这个密钥既用来加密,也用于解密。

AES加密方式有五种:ECB, CBC, CTR, CFB, OFB

AES填充模式常用的有三种,分别是:NoPaddingZeroPaddingPKCS7,默认为PKCS7

从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的Javascrip实现。

CBC 和ECB模式的区别就是:

  • CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)
  • ECB加密不需要iv,只需要key(密钥)

JS逆向时,AES加密的搜索关键词有AESmodepadding等。

AES-ECB模式

加密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)

运行结果:

在这里插入图片描述

AES-CBC模式

加密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解密后的数据: 好吧!被你看见这篇文章了,这就是加密前数据。

常用的加密算法总结:

  1. 对称加密(加密解密密钥相同):DESDES3AES

  2. 非对称加密(分公钥私钥):RSA

  3. 信息摘要算法/签名算法:MD5HMACSHA

  4. 前端实际使用中MD5AESRSA,自定义加密函数使用频率是最高的

  5. 几种加密方式配合次序:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,用签名算法生成非对称加密的摘要

  6. DES、DES3、AES、RSA、MD5、SHA、HMAC传入的消息或者密钥都是bytes数据类型,不是bytes数据类型的需要先转换;密钥一般是8的倍数

  7. Python实现RSA中,在rsa库中带有生成签名和校对签名的方法

  8. 安全性:DES,至于MD5、SHA、HMAC不好说了

你可能感兴趣的:(JS逆向,javascript,开发语言,ecmascript)