前端常用6种数据加密方式的使用(最详解)

目录

前言

一、6种常用加密方案

1.Base64加密

2.MD5加密(不可逆)

3.sha256加密

4.sha1加密(相比于MD5 安全性高,但是 速度慢)

5.AES加密

6.字符串的编码和解码

二、结语

往期回顾


前言

相信大家在工作或面试中经常遇到需要加密的功能,无论是 web 后台还是小程序,都常常存在加解密传输,签名防篡改等机制,会使很多渗透人员没有办法直接对参数的值进行更改,大大增加了攻击者的攻击成本。下面我介绍前端6种常用的加密如何使用,如有不足之处,欢迎大家补充。

一、6种常用加密方案

1.Base64加密

简介

Base64顾名思义,就是基于64个可打印字符来表示二进制数据的一种方法,「注意它并不是一种加密算法」。对于64个打印字符,我们只需要6个二进制位就可以完全表示了。那么我们如何利用8个二进制位来表示只需要6个二进制位就可以完全表示的可打印字符呢?由于2的6次方等于64,所以我们可以将每6个位元为一个单元,对应某个可打印字符。三个字节有24个位元,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。

如何使用

原生加解密
  const btoa = window.btoa('hello, my name is FuChaoyang ')  // 编码console.log('加密后',btoa)const atob = window.atob('aGVsbG8sIG15IG5hbWUgaXMgRnVDaGFveWFuZyA')  // 解码console.log('解密后',atob)

base64插件 

 安装:

npm install --save js-base64

比如vue3中引入使用,其他框架大同小异,可做参考

<script lang="ts">
import { defineComponent } from 'vue';
import { Base64 } from 'js-base64';
export default defineComponent({name: 'Test',setup() {const encode = Base64.encode('hello, my name is FuChaoyang'); // 编码console.log('插件加密后', encode);const decode = Base64.decode('aGVsbG8sIG15IG5hbWUgaXMgRnVDaGFveWFuZyA'); // 解码console.log('插件解密后', decode);}
});
</script>

总结

优势:

  • base64 适合不同平台、不同语言的传输;
  • 页面中内嵌使用 base64 格式的小图片,可减少了服务器访问次数;
  • 二进制位转换 base64 算法简单,对性能影响不大;

缺点:

  1. 二进制文件转换为 base64 后,体积大概增加 1/3;
  2. base64 无法缓存,要缓存只能缓存包含 base64 的文件,比如 js 或者 css;
  3. 面对大文件时,会消耗一定的 CPU 进行编解码。

2.MD5加密(不可逆)

简介

MD5是一种单向哈希算法,即将任意长度的“消息”经过哈希运算,生成一个128位的“指纹”。

使用MD5加密可以将原始的字符串转化为不可逆的密文,从而保证数据在传输中不被篡改,提高安全性。在前端中,我们可以通过JS库调用md5加密函数进行字符串加密,以保护用户信息。

如何使用 

安装

npm install js-md5 -s

 npm地址:https://www.npmjs.com/package/js-md5 

 比如vue3中引入使用,其他框架大同小异,可做参考

<script lang="ts">
import { defineComponent } from 'vue';
import { md5 } from 'js-md5'; // 引入
export default defineComponent({name: 'Test',setup() {console.log('md5加密', md5('hello, my name is FuChaoyang'));}
});
</script>

使用技巧

加盐

为了增强加密的安全性,我们可以在原始字符串的基础上再加上一段随机的字符串,这个字符串就是“盐”。

比如如下加盐加密:

<script lang="ts">
import { defineComponent } from 'vue';
import { md5 } from 'js-md5'; // 引入
export default defineComponent({name: 'Test',setup() {console.log('md5加密', md5('hello, my name is FuChaoyang'));const salt = 'AbC$123'; // 定义一个随机的盐值console.log('加盐后md5加密', md5('hello, my name is FuChaoyang' + salt));}
});
</script>

将"hello, my name is FuChaoyang"加上随机字符串"AbC$123"后的结果。 通过加盐可以降低被破解的风险,增强应用的安全性。 

多次加密

为了提高加密的强度,我们可以将加密结果再次进行md5加密,多次加密后的结果更加难以破解。

比如如下多次加密:

<script lang="ts">
import { defineComponent } from 'vue';
import { md5 } from 'js-md5'; // 引入
export default defineComponent({name: 'Test',setup() {// MD5普通加密console.log('md5加密', md5('hello, my name is FuChaoyang'));// MD5加盐加密const salt = 'AbC$123'; // 定义一个随机的盐值console.log('加盐后md5加密', md5('hello, my name is FuChaoyang' + salt));// MD5多次加密console.log('md5多次加密', md5(md5('hello, my name is FuChaoyang')));}
});
</script>

即对md5两次加密后的结果 。

注意点

1. 不要使用固定密钥

不要使用固定的密钥进行加密,否则容易被破解。应该采用随机密钥或者动态生成密钥进行加密。

2. 不要将加密算法公开

不要将加密算法公开,否则可能会被攻击者破解。应该将加密算法保密,仅在需要的场合使用。

3. 不要只依赖前端加密

即使在前端进行加密,也应该在后端进行加密验证,以增强应用的安全性。

 使用场景

 最常见的网站页面登录password加密,版权验证,文件上传比较。

3.sha256加密

简介

SHA256是SHA-2下细分出的一种算法SHA-2,名称来自于安全散列算法2(英语:Secure Hash Algorithm 2)的缩写,一种密码散列函数算法标准(哈希算法),由美国国家安全局研发,属于SHA算法之一,是SHA-1的后继者。

SHA-2下又可再分为六个不同的算法标准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。这些变体除了生成摘要的长度 、循环运行的次数等一些微小差异外,算法的基本结构是一致的。对于任意长度的消息,SHA256都会产生一个256bit长的哈希值,称作消息摘要。这个摘要相当于是个长度为32个字节的数组,通常用一个长度为64的十六进制字符串来表示。

如何使用

安装

npm install crypto-js --save

 npm地址:https://www.npmjs.com/package/crypto-js 

 比如vue3中引入使用,其他框架大同小异,可做参考

<script lang="ts">
import { defineComponent } from 'vue';
import sha256 from 'crypto-js/sha256';
export default defineComponent({name: 'Test',setup() {// sha256多次加密console.log('sha256加密后', sha256('hello, my name is FuChaoyang'));}
});
</script>

特点: 单向加密,不可解密,同明文,同密文。

使用场景 

 网站验证密码,为了保证安全,不会储存明文密码,而是直接储存 hash。

4.sha1加密(相比于MD5 安全性高,但是 速度慢)

简介

SHA-1是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。

如何使用

sha1的加密和sha256,AES用的函数库都可以是crypto-js,因此我们主要装了crypto-js,这三个加密方式都可以引入使用,当然你也可以用npm上单独依赖库,这里只用crypto-js为例, 比如vue3中引入使用,其他框架大同小异,可做参考

<script lang="ts">
import { defineComponent } from 'vue';
import sha1 from 'crypto-js/sha1';
export default defineComponent({name: 'Test',setup() {// sha1加密console.log('sha1加密后', sha1('hello, my name is FuChaoyang'));}
});
</script>

使用场景

 用户密码校验比较,文件的完成性比较,文件上传,版权验证。

5.AES加密

简介

AES是一种对称加密算法,全称为“高级加密标准”(Advanced Encryption Standard)。它是一个区块加密算法,适用于大多数应用场景,包括加密和解密,还可以在不同的平台和设备之间进行加密和解密操作,AES加密算法支持多种加密模式。 

如何使用

还是用crypto-js为例, 比如vue3中引入使用,其他框架大同小异,可做参考

<script lang="ts">
import { defineComponent } from 'vue';
import CryptoJS from 'crypto-js';
export default defineComponent({name: 'Test',setup() {const key = CryptoJS.enc.Utf8.parse('123321'); // 密钥 后端提供const iv = CryptoJS.enc.Utf8.parse(''); // 偏移量/*** AES加密 :字符串 key iv  返回base64*/const Encrypt = (word: any)=> {const srcs = CryptoJS.enc.Utf8.parse(word);const encrypted = CryptoJS.AES.encrypt(srcs, key, {iv,mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);};`    /*** AES 解密 :字符串 key iv  返回base64*  */`;const Decrypt = (word: any)=> {const base64 = CryptoJS.enc.Base64.parse(word);const src = CryptoJS.enc.Base64.stringify(base64);const decrypt = CryptoJS.AES.decrypt(src, key, {iv,mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});return CryptoJS.enc.Utf8.stringify(decrypt);};console.log('AES加密后', Encrypt('wo shi fuzhaoyang'));console.log('AES解密后', Decrypt(Encrypt('wo shi fuzhaoyang')));}
});
</script>

 涉及需要后端秘钥偏移量设置,这里不做结果展示。

使用场景

最常见的页面签名。

6.字符串的编码和解码

escape编码 unescape解码

<script lang="ts">
import { defineComponent } from 'vue';
export default defineComponent({name: 'Test',setup() {let str = '富朝阳的前端博客';let newStr = escape(str);console.log('字符串:', str);console.log('加密:', newStr);let newStr2 = unescape(newStr);console.log('解密:', newStr2);}
});
</script>

注意点:对于汉字,数字不适用。 

二、结语

讲到这里,相信大家对前端加密的6种方式有详细的使用认识,如有不足之处,请大家补充,欢迎在评论区交流。

如果文章对你有所帮助,❤️关注+点赞❤️鼓励一下博主会持续更新。。。。

我的个人博客:https://code-nav.top

往期回顾

 js对url进行编码解码(三种方式)

Angular8升级至Angular13遇到的问题

前端性能优化9大策略(面试一网打尽)!

JavaScript中的call、apply、 bind的用法、实现以及三者之间的区别?

 ES6实用的技巧和方法有哪些?

ES6 proxy 看这一篇就够啦!

你确定你会reduce方法?

JS获取地址栏参数的方法(原生、vue、angular、react)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/336766.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果电脑Markdown文本编辑Typora mac功能介绍

Typora mac是一款跨平台的Markdown编辑器&#xff0c;支持Windows、MacOS和Linux操作系统。它具有实时预览功能&#xff0c;能够自动将Markdown文本转换为漂亮的排版效果&#xff0c;让用户专注于写作内容而不必关心格式调整。Typora Mac版除了支持常见的Markdown语法外&#x…

【JVM】执行引擎 Execution Engine

一、简介 执行引擎是Java虚拟机&#xff08;JVM&#xff09;的核心组成部分之一&#xff0c;它的主要任务是负责装载字节码到其内部。由于字节码并不能够直接运行在操作系统之上&#xff0c;因此需要将字节码指令解释/编译为对应平台的本地机器指令&#xff0c;简单来说JVM的执…

2024年湖北建筑类中级职称申报哪里有?

武汉、湖北省直、黄石、黄冈、宜昌、襄阳、恩施、荆门、荆州、孝感、咸宁、十堰、神龙架、天门、潜江、仙桃、汉口、汉阳、武昌、东湖高新等湖北所有地方职称都可以申报代办。 职称无非就是一些申报条件、申报时间、申报流程、提交资料、评审答辩等相关问题&#xff0c;这些了…

09、Kafka ------ 通过修改保存时间来删除消息(retention.ms 配置)

目录 通过修改保存时间来删除消息★ 删除指定主题的消息演示1、修改kafka检查过期消息的时间间隔2、修改主题下消息的过期时间3、查看修改是否生效4、先查看下主题下有没有消息5、添加几条消息看效果6、查看消息是否被删除 ★ 恢复主题的retention.ms配置1、先查看没修改前的te…

FPGA之按键消抖

目录 1.原理 2.代码 2.1 key_filter.v 2.2 tb_key_filter.v 1.原理 按键分为自锁式按键和机械按键&#xff0c;图左边为自锁式按键 上图为RS触发器硬件消抖&#xff0c;当按键的个数比较多时常常使用软件消抖。硬件消抖会使用额外的器件占用电路板上的空间。 思路就是使用延…

wagtail的一个简单blog示例

前提 已正确配置python虚拟环境 https://blog.csdn.net/gsl371/article/details/117917857 已创建wagtail项目 https://blog.csdn.net/gsl371/article/details/134569335 创建应用 (env) C:\djproject\wagprj\mysite>python manage.py startapp blog配置修改 在配置文件…

Cesium笔记 viewer控件隐藏

Cesium初始化后&#xff0c;场景中会有时间轴&#xff0c;动画&#xff0c;home等控件显示&#xff0c;需要将这些控件隐藏&#xff0c;如下&#xff1a; init() {let viewer new Cesium.Viewer("cesiumContainer", {fullscreenButton: false, // 隐藏界面右下角全…

STL——vector详解

目录 &#x1f4a1;基本概念 &#x1f4a1;存放内置数据类型 &#x1f4a1;存放自定义数据类型 &#x1f4a1;存放自定义数据类型指针 &#x1f4a1;vector容器嵌套容器 &#x1f4a1;vector构造函数 &#x1f4a1;vector赋值操作 &#x1f4a1;vector容量和大小 &…

vulhub中的Nginx漏洞的详细解析

Nginx漏洞 1.cd到nginx_parsing_vulnerability cd /opt/vulhub/nginx/nginx_parsing_vulnerability 2.执行docker-compose up -d 3.查看靶场是否开启成功 dooker ps 4.访问浏览器 因为这里是80端口所以直接使用ip就能访问成功 5.上传图片 注意这里的图片是含有一句话木马的图…

MySQL8下载安装教程

一、MySQL下载 我的版本是8.2.0&#xff0c;当前的最新版本&#xff0c;网址如下&#xff1a;MySQL :: Download MySQL Community Server 点击No thanks&#xff0c;just start my download&#xff0c;就是只是开始下载的意思&#xff0c;点击下载&#xff0c;等待下载完成 二…

PLECS如何下载第三方库并导入MOSFET 的xml文件,xml库路径添加方法及相关问题

1. 首先xml库的下载&#xff0c;PLECS提供了一个跳转的链接。 https://www.plexim.com/download/thermal_models 2. 下载一个库&#xff08;以最后一个Wolfspeed为例&#xff0c;属于CREE的SiC MOSFET&#xff09; 下载这个就行&#xff0c;都包含了。不信自己可以试试再下载…