前端你得会——加密解密之crypto-js(建议收藏)
csdh11 2025-01-16 19:13 44 浏览
场景
在开发过程中,我们会经常会从当前系统跳转别的系统进行访问或者页面嵌套使用。
那一般都会给到一个地址进行参数拼接,然后去访问。那么会存在一个问题,就是地址暴露在外面参数使用明文的话会被篡改,极度不安全。
这个时候我们就考虑到加密,前端和后端协定好一种加密方式,然后前端进行参数加密传到后端,后端再去解密(可逆)。
加密方式也有很多种,今天我推荐的是一款强大的前端加密/解密js库——crypto-js。
crypto-js是什么
crypto-js 是一个纯 javascript 写的加密算法类库 ,可以非常方便地在 javascript 进行 MD5、SHA1、SHA2、SHA3、RIPEMD-160 哈希散列,进行 AES、DES、Rabbit、RC4、Triple DES 加解密。
GitHub:https://github.com/brix/crypto-js
安装
npm install crypto-js
使用
ES6模块引入方法:
import sha256 from 'crypto-js/sha256';
import hmacSHA512 from 'crypto-js/hmac-sha512';
import Base64 from 'crypto-js/enc-base64';
模块加载引入方法:
var AES = require("crypto-js/aes");
var SHA256 = require("crypto-js/sha256");
页面标签引入方法:
<script type="text/javascript" src="path-to/bower_components/crypto-js/crypto-js.js"></script>
<script type="text/javascript">
var encrypted = CryptoJS.AES(...);
var encrypted = CryptoJS.SHA256(...);
</script>
项目中使用实例
这里我以 React作为例子,其他的也就大同小异了。
第一步:封装工具类
我们可以写一个工具类,专门封装加密解密的方法,比如我新建一个cryptoAES.js的文件,放在utils 目录下(放哪无所谓),代码如下:
const CryptoJS = require('crypto-js'); //引用AES源码js
const key = CryptoJS.enc.Utf8.parse("1234123412ABCDEF"); //十六位十六进制数作为密钥
const iv = CryptoJS.enc.Utf8.parse('ABCDEF1234123412'); //十六位十六进制数作为密钥偏移量
//解密方法
function (word) {
let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}
//加密方法
function Encrypt(word) {
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return encrypted.ciphertext.toString().toUpperCase();
}
export default {
Decrypt ,
Encrypt
}
上面的代码中的 key 是密钥 ,iv 是密钥偏移量,这两个参数前后端协定好保持一致,相当是我们的小秘密,不能告诉别人[闭嘴],不然加密的意义就没了。
值得注意的是密钥的长度,由于对称解密使用的算法是 AES-128-CBC算法,数据采用 PKCS#7 填充 , 因此这里的 key 需要为16位!
接着我们定义了 解密方法Decrypt 和 加密方法 Encrypt ,最后通过 export 和default 将其暴露出去,方便在需要的时候进行引入....
工具类写好了,很简单,然后是怎么使用了~
第二步:使用工具类
我们有一个index.tsx文件,在这里面使用加密和解密的方法。
这里我只演示加密,解密同理。
import { Decrypt, Encrypt } from '/utils /cryptoAES.js';
.
.
//比如我组装好了拼接的参数
const str = '103170,112425366,253.00,20210428173700'
Encrypt(str)
加密后的结果是:
hoDfJ9U+uY+v8wYKdudbTUR+Z7g1Ui9YraVhfD9g2fMipYlFxnoLE0qbf+YsnEuk
这里有个问题,加密后的字符串里面是包含了+号,发送的话,在进行地址解析时,会把 + 号转换为 空格, 直接导致参数不能正确传输,所以我们用到了JS的encodeURIComponent(),将所有的 + 号 手动转换为 %2B 即可正常传输。
encodeURIComponent(str)
//返回新结果
hoDfJ9U%2BuY%2Bv8wYKdudbTUR%2BZ7g1Ui9YraVhfD9g2fMipYlFxnoLE0qbf%2BYsnEuk
好了,一个简单的前端加密的过程就写完了。
总结
使用加密的场景有很多,我这里只讲述了URL地址加密的场景,简单总结下:
第一步:安装crypto-js
第二步:引入crypto-js
第三步:封装工具类(当然也可以直接使用)
第四步:调用工具类
第五步:使用encodeURIComponent方法转码,然后拼接
当然,这个是最基础的用法,想深入可查看官方文档!
结尾:希望小凡的每篇文章对你都有所帮助!
关注我,一起学习进步
相关推荐
- 手机最强Python编程神器,在手机上运行Python
-
手机编程软件有很多,大部分都很难使用,操作不灵活,甚至不能安装第三方库。...
- centos7上安装python3
-
centos7上默认安装的是python2,要使用python3则需要自行下载源码编译安装。1.安装依赖...
- python详细安装教程
-
本章开始,我们将详细介绍Python编程环境的搭建,工欲善其事必先利其器,所以我们这里先介绍python详细安装教程。由于Python是跨平台的,他可以运行在Windows、Linux、Mac等系统上...
- 再见!Python 3.6
-
到上月为止,Python3.6对我来说已经死掉了。...
- 手把手教你使用Python网络爬虫下载一本小说(附源码)
-
大家好,我是Python进阶者。前言前几天【磐奚鸟】大佬在群里分享了一个抓取小说的代码,感觉还是蛮不错的,这里分享给大家学习。...
- Windows系统下载安装Python3.9(安装Python3.11同理)
-
本节我们将向大家介绍如何在Windows系统安装Python3.9开发环境,安装Python3.11下载Python3.11安装包即可,安装流程都是一样的下载安装Python3.9环境...
- 使用python3爬取网页,aria2下载最新电影,Jellyfin播放电影
-
前言:在我搭建好Jellyfin软件后,因为只能播放本地视频,就想能不能播放网络上的电影,可以每天自动下载并更新,这样就不用我手工下载好,再上传到NAS中播放。或许有更好的方法,那就是直接用电影播放源...
- Python第一课:下载与安装
-
Python自学靠不靠谱?容易上手么?掌握周期长么?如果你真的有兴趣学习Python,那么可以告诉你,只要你兴趣还在,那么你的Python就会了一半,没错,Python就是如此简单,废话不多说,下面跟...
- CentOS 7下安装Python 3.10的完整过程
-
1.安装相应的编译工具yum-ygroupinstall"Developmenttools"yum-yinstallzlib-develbzip2-develope...
- Ubuntu 25.04发行版登场:Linux 6.14内核,带来多项技术革新
-
IT之家4月18日消息,科技媒体linuxiac昨日(4月17日)发布博文,报道称代号为PluckyPuffin的Ubuntu25.04发行版正式上线,搭载最新Linu...
- 解放双手!Python 自动化下载邮件附件,可自定义时间段
-
在日常工作中,我们经常需要从邮箱里下载特定日期范围内的邮件附件。想象一下,你需要收集过去几个月内客户发送的报价单、合同等附件,如果手动一个个去查找和下载,那得花费多少时间和精力呀!今天就给大家分享一个...
- Python爬取下载m3u8加密视频,原来这么简单
-
1.前言爬取视频的时候发现,现在的视频都是经过加密(m3u8),不再是mp4或者avi链接直接在网页显示,都是经过加密形成ts文件分段进行播放。...
- Python3 网络爬虫:漫画下载,动态加载、反爬虫这都不叫事
-
一、前言作者:JackCui经过上两篇文章的学习,Python爬虫三步走:发起请求、解析数据、保存数据,已经掌握,算入门爬虫了吗?不,还远远不够!只掌握这些,还只能算门外汉级别。今天,就来带大家继续...
- win7装DeepseeK的方法
-
DeepSeek是一个基于Python的工具或库,因此能否在Windows7上运行取决于以下因素:---###1.**Python版本支持**-DeepSeek需要Python...
- Linux环境中利用curl和wget命令下载文件的使用技巧
-
简介:Linux里常常用来下载文件的命令有curl命令和wget命令。wget命令一般是从特定的URL下载文件。wget有个优点,就是比较稳当,特别适合网络带宽窄或者网络不太稳定的情...
- 一周热门
- 最近发表
- 标签列表
-
- mydisktest_v298 (34)
- document.appendchild (35)
- 头像打包下载 (61)
- acmecadconverter_8.52绿色版 (39)
- word文档批量处理大师破解版 (36)
- server2016安装密钥 (33)
- mysql 昨天的日期 (37)
- parsevideo (33)
- 个人网站源码 (37)
- centos7.4下载 (33)
- mysql 查询今天的数据 (34)
- intouch2014r2sp1永久授权 (36)
- 先锋影音源资2019 (35)
- jdk1.8.0_191下载 (33)
- axure9注册码 (33)
- pts/1 (33)
- spire.pdf 破解版 (35)
- shiro jwt (35)
- sklearn中文手册pdf (35)
- itextsharp使用手册 (33)
- 凯立德2012夏季版懒人包 (34)
- 冒险岛代码查询器 (34)
- 128*128png图片 (34)
- jdk1.8.0_131下载 (34)
- dos 删除目录下所有子目录及文件 (36)