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加密的keyvar 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<DES3=AES<RSA,至于MD5、SHA、HMAC不好说了

Javascript实现AES算法相关推荐

  1. JavaScript实现AES算法加密和解密

    JavaScript的加密和解密用的是google的CryptoJS库.本文以AES/ECB/NoPadding为例展示AES加密和解密的方法. 需要下载CryptoJS库,下载地址如下: https ...

  2. 前后台加解密的使用--SHA256算法 RSA算法 AES算法

    SHA256算法 sha256与md5一样是散列算法,不是加密算法,不存在解密的问题,因此是不可逆的,可以通过key+password,对密码进行加密,在后台进行比对,安全性比md5高一点,加密后生成 ...

  3. 学习JavaScript数据结构与算法(一):栈与队列

    本系列的第一篇文章: 学习JavaScript数据结构与算法(一),栈与队列 第二篇文章:学习JavaScript数据结构与算法(二):链表 第三篇文章:学习JavaScript数据结构与算法(三): ...

  4. 关于AES算法及JAVA中的实现

    为什么80%的码农都做不了架构师?>>>    什么是AES 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法, ...

  5. Delphi与JAVA互加解密AES算法

    搞了半天终于把这个对应的参数搞上了,话不多说,先干上代码: package com.bss.util;import java.io.UnsupportedEncodingException; impo ...

  6. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...

  7. AES算法相关数学知识 - 素域学习

    在AES算法中的MixColumn层中会用到伽罗瓦域中的乘法运算,而伽罗瓦域的运算涉及一些数学知识如下: 素域 有限域有时也称伽罗瓦域,它指的是由有限个元素组成的集合,在这个集合内可以执行加.减.乘和 ...

  8. JavaScript数组去重算法实例

    本文主要介绍了JavaScript数组去重算法,结合实例形式总结分析了JavaScript数组去重相关的读写.遍历.比较.排序等操作及算法改进相关实现技巧,需要的朋友可以参考下 测试用例: arr = ...

  9. 为什么我要放弃javaScript数据结构与算法(第二章)—— 数组

    第二章 数组 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构.JavaScript里也有数组类型,虽然它的第一个版本并没有支持数组.本章将深入学习数组数据结构和它的能力. 为什么 ...

最新文章

  1. conda-forge,conda,-c的理解
  2. 嵌入式linux完整top命令,linux的top命令详解
  3. [Java]关于throw,throws,try{}catch(){}
  4. php escapeshellcmd,利用/绕过 PHP escapeshellarg/escapeshellcmd函数
  5. Silverlight 5 Beta新特性[5]隐式模板支持
  6. HR怼程序员频繁跳槽,程序员竟这么回怼
  7. pbxproj文件冲突解决办法
  8. We7从这里开始---认识we7
  9. Atitit 圣爱提拉克斯在会议上 2019年10月中旬的一天,有过这样的事。 这天,地方上风大。出乎人们意料之外,到东海岸一个地方访问的亲爱的领导者圣爱提拉克斯要同人们一道开会。主持人着了慌,
  10. 怎么在博客上积累代码量?
  11. mysql跨库查询语句mybatis_mybatis实现跨库多表查询
  12. 路由2台,二层交换机4台,三层1台,实现网络互联
  13. 第二章 年轻人都是富翁
  14. 计算机30首音乐怎么开,qq每日精选_qq音乐每日精选30首在哪找
  15. C/C++语言100题练习计划 97——素数对
  16. JS--实现漂浮广告
  17. UVM交互式调试库:缩短调试周转时间
  18. “部分-整体“——组合模式
  19. Xray+Rad+FOFA
  20. 问题 A: 【字符串】最长回文子串

热门文章

  1. 什么时候不该使用es6箭头函数 1
  2. 孩子缺乏学习动力的表现
  3. 漫步者耳机看网页版视频自动关机
  4. 百度翻译日活大涨40%:技术十年沉淀,爆发恰逢其时
  5. 我为能准时下班而做的准备,以及由此的收获,同时总结下不足
  6. java取整6_JAVA取整
  7. Centos7笔记之Docker-ce上运行ASP.NET CORE程序
  8. Pr_cc 学习笔记(七)速度,倒放,持续时间,播放速度,R工具
  9. python 运行r语言_如何在R中运行Python
  10. 电脑的WLAN不见了解决方法(安装包里面也有蓝牙的)