AES算法以及前端使用实例
AES算法: 我们通常是将一串明文通过AES加密成密文然后传递,接收方采用相同的方法解密进行使用,下面详细介绍使用方法、以及可能遇到的bug。
密匙:随机的字符串都可,但要注意长度要求为4、8、12、16等幂次增长,否则解密困难。
一、加密解密涉及的参数说明:
- key(密匙):自定义;
- 明 文 :要加密的值;
- IV :向量,偏移量;
- mode : 加密模式五种,EBC(不支持IV)、CBC、CFB、OFB、CTR,前两者常 用、后四种均支持IV;
- padding : 填充方式三种,PKCS5,、PKCS7(如果使用PKCS5报错,用PKCS7就可 以)、 NOPADDING
- 密文 :加密后的值;前端加密出来的就是base64格式的
二、结合react简单使用:
注:CryptoJS.enc.Utf8.parse 是用来从UTF8编码解析出原始字符串,以及配对的可以把字符串转成UTF8编码
转为加密需要的wordarray:let wordarray = CryptoJS.enc.Utf8.parse("****")
转为字符串:let utf8str = CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Utf8.stringify(decrypt))
1、npm 安装:npm install crypto-js2、引入:import CryptoJS from 'crypto-js'; 3、使用//加密encrypt(word){var key = CryptoJS.enc.Utf8.parse("tion2077");//密钥与后端保持一致var srcs = CryptoJS.enc.Utf8.parse(word);var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); //encrypted.toString() 就是base64格式的return encodeURIComponent(encrypted.toString()); // (encodeURIComponent可以不要,根据自己的需求来)}//解密decrypt(word){let decodeurl = decodeURIComponent(word) //(对应上方的decodeURIComponent)var key = CryptoJS.enc.Utf8.parse("tion2077");var decrypt = CryptoJS.AES.decrypt(decodeurl, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});return CryptoJS.enc.Utf8.stringify(decrypt).toString();}console.log('加密前:123'); //加密前:123console.log('加密后:',this.encrypt(123)); //加密后:Qr1BDgw5JWOWySL8m4KTFQ%3D%3Dconsole.log('解密后:',this.decrypt(this.encrypt(123))); //解密后:123
三、相关拓展
1、加密后的数据直接转为字符串是Base64编码的: eg. encryteddata.toString() 这种解密的时候不需要btoa等base解码,如第二部分代码即可2、转为java的密文应为(一般后端想要这种):let encoded_str = encryteddata.ciphertext.toString()这时解密就要将其先转为base64格式第一步:let encryptedHexStr = CryptoJS.enc.Hex.parse(encoded_str) //先转为16进制第二步:let encryptedBase64 = CryptoJS.enc.Base64.stringify(encryptedHexStr) //转为base643、代码编写//加密encrypt(word){var key = CryptoJS.enc.Utf8.parse("tion2077");//密钥与后端保持一致var srcs = CryptoJS.enc.Utf8.parse(word);var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); //encrypted.toString() 就是base64格式的return encodeURIComponent(encrypted.ciphertext.toString()); // (encodeURIComponent可以不要,根据自己的需求来)}//解密decrypt(word){let decodeurl = decodeURIComponent(word) //(对应上方的decodeURIComponent)let encryptedHexStr = CryptoJS.enc.Hex.parse(decodeurl) //WordArray.init格式//{sigBytes: 16,words: (4) [1119699214, 205071715, -1765203204, -1685941483]}let encryptedBase64 = CryptoJS.enc.Base64.stringify(encryptedHexStr) //Qr1BDgw5JWOWySL8m4KTFQ==var key = CryptoJS.enc.Utf8.parse("tion2077");var decrypt = CryptoJS.AES.decrypt(decodeurl, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});return CryptoJS.enc.Utf8.stringify(decrypt).toString();}console.log('加密前:123'); //加密前:123console.log('加密后:',this.encrypt(123)); //加密后:42bd410e0c39256396c922fc9b829315console.log('解密后:',this.decrypt(this.encrypt(123)));//解密后:123
AES算法以及前端使用实例相关推荐
- DES加密解密算法(前端后端)
DES加密解密算法(前端&后端) 原作者 阿弥陀佛1114 原文链接:https://blog.csdn.net/zong1114/article/details/51754470 DES对 ...
- Javascript实现AES算法
JavaScript的加密和解密用的是google的CryptoJS库. 需要下载CryptoJS库,下载地址如下:https://github.com/sytelus/CryptoJS AES算法 ...
- 前后台加解密的使用--SHA256算法 RSA算法 AES算法
SHA256算法 sha256与md5一样是散列算法,不是加密算法,不存在解密的问题,因此是不可逆的,可以通过key+password,对密码进行加密,在后台进行比对,安全性比md5高一点,加密后生成 ...
- php 3 3公派算法代码,PHP常见算法合集代码实例
许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣,下面是一些常用的算法和实例,大家可以好好学习下 一.文件夹遍历 function allFile($path = __DIR_ ...
- 关于AES算法及JAVA中的实现
为什么80%的码农都做不了架构师?>>> 什么是AES 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法, ...
- Delphi与JAVA互加解密AES算法
搞了半天终于把这个对应的参数搞上了,话不多说,先干上代码: package com.bss.util;import java.io.UnsupportedEncodingException; impo ...
- php最常见代码,PHP常见算法合集代码实例
许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣,下面是一些常用的算法和实例,大家可以好好学习下 一.文件夹遍历<?php function allFile($path ...
- AES算法相关数学知识 - 素域学习
在AES算法中的MixColumn层中会用到伽罗瓦域中的乘法运算,而伽罗瓦域的运算涉及一些数学知识如下: 素域 有限域有时也称伽罗瓦域,它指的是由有限个元素组成的集合,在这个集合内可以执行加.减.乘和 ...
- Adaboost算法原理分析和实例+代码(简明易懂)
Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333 ...
最新文章
- xwpftemplate的时间设置_java poi设置生成的word的图片为上下型环绕以及其位置
- [跟我学UML] UML包图中的包引入和包合并
- nodejs事务使用总结
- 20位数字转化成6位不重复码_人力资源管理浅析身份证数字号码编排常识甄别年龄、性别、籍贯…...
- 昆仑通态复制的程序可以用吗_昆仑通态专题(七):MCGS组态软件的设备窗口...
- linux中cv调用摄像头,ubuntu中opencv调用摄像头
- 启动器和选择器学习-----(1)总括
- Pandas dtypes
- 程序员如何在 HTTPS 中高效配置通配符证书?| 技术头条
- ajax跨域问题解决(spring boot)
- 第三季-第21课-多线程同步
- idea添加scala环境_Scala(一)——scala+Idea环境配置
- linux系统管理员用户名为admin,Linux创建系统管理员用户
- 微信开发者工具的使用
- ECPC16-E. Jumping(bfs)
- mysql中没有sock文件_mysql.sock文件不见了问题的解决方法
- ROS:launch规范及用法
- canvas流星雨 数据流
- 【AI测试】人工智能测试整体介绍——第四部分
- 计算机物流管理,大学饮食管理计算机物流管理程序作用