当前位置: 首页 > news >正文

【前端知识】前端加密算法(base64、md5、sha1、escape/unescape、AES/DES)

前端加密算法

一、base64加解密算法

  • 简介:Base64算法使用64个字符(A-Z、a-z、0-9、+、/)来表示二进制数据的64种可能性,将每3个字节的数据编码为4个可打印字符。如果字节数不是3的倍数,将会进行填充。

  • 优点:

    1. 可打印字符:Base64编码后的数据只包含可打印字符,不会出现乱码或无法传输的情况。
    2. 广泛支持:Base64被广泛支持于各种编程语言和网络协议中,可以方便地应用于各种场景。
    3. 简单易用:Base64的编码和解码很简单,只需要少量的代码即可完成。
  • 缺点:

    1. 数据膨胀:Base64编码后的数据通常比原始数据要大约1/3左右,这意味着在传输大量数据时会增加传输的时间和带宽消耗。
    2. 不加密:Base64只是一种编码方式,而不是加密算法,它并不能提供数据的安全性。
  • 简单实现

    // 加密
    let str_to_base64 = window.btoa(str);
    console.log(str_to_base64);
    // 解密
    let base64_to_str = window.atob(str_to_base64)
    console.log(base64_to_str);
    

二、MD5加密算法(不可逆)

  • 简介:MD5(Message Digest Algorithm 5)是一种常用的加密算法,用于对数据进行加密和解密。它是一种哈希函数,能够将任意长度的数据转换为固定长度的摘要(128位),并且具有不可逆性。

  • 优点:

    1. 快速而高效:MD5算法对数据进行加密和解密的速度很快,特别适用于大规模数据处理。

    2. 简单易用:MD5算法的实现相对简单,使用方便。

    3. 不可逆性:由于MD5算法是单向的哈希函数,所以无法通过摘要反推出原始数据。

  • 缺点:

    1. 容易碰撞:由于MD5摘要的长度固定,而原始数据的长度可以是任意的,因此可能会出现不同的数据生成相同的摘要,即碰撞情况。

    2. 安全性较弱:随着计算能力的提升,现在已经有办法对MD5进行碰撞攻击,即找到两个不同的数据生成相同的摘要。

    3. 不支持加密与解密操作:MD5只能用于生成数据的摘要,无法实现数据的加密和解密。

  • 简单实现

    const md5 = require('./md5.min.js');
    // 加密
    let str_to_md5 = md5(str);
    console.log(str_to_md5);
    

三、sha1加密算法(不可逆)

  • 简介:SHA-1算法是美国国家安全局(NSA)设计的一种安全哈希函数,于1995年发布。它接受输入数据并通过一系列步骤生成唯一的哈希值,该值具有较高的唯一性和不可逆性。SHA-1算法的设计目标是提供数据完整性校验和数字签名等应用。

  • 优点

    1. 简单快速:相对于其他哈希算法,SHA-1算法具有较快的处理速度,并且实现相对简单。

    2. 安全性:SHA-1算法在设计时被认为是安全的,其哈希值的冲突概率很低,使其适用于许多安全应用。

  • 缺点

    1. 强度不足:由于技术进步和计算能力提升,SHA-1算法已经不再被认为是安全的。已经发现了多个针对SHA-1哈希碰撞的攻击方法。

    2. 安全性退化:由于现代计算机能力的提高,攻击者可以使用更强大的硬件和算法来更快地计算SHA-1哈希碰撞。

    3. 不可逆性:SHA-1算法是一种单向散列函数,即无法从哈希值恢复原始数据。这在某些场景下可能是一个缺点。

  • 简单实现

    const sha1 = require('./sha1.min.js');
    // 加密
    let str_to_sha1 = sha1(str);
    console.log(str_to_sha1);
    

四、escape & unescape 编码/解码

  • 简介:escape 和 unescape 是 JavaScript 中提供的编码和解码函数,用于处理特殊字符的转义和恢复。它们的作用是将字符串中的特殊字符转换为编码表示,以便在不同的上下文中进行安全传输或存储,并且可以再次解码以恢复原始字符串。

  • 优点

    1. 简单易用:escape 和 unescape 函数是 JavaScript 内置函数,可以直接调用,无需额外的库或依赖。

    2. 兼容性好:这些函数在大多数主流浏览器中都得到支持,能够在不同的平台和环境中正常工作。

    3. 跨语言支持:由于 escape 和 unescape 是基于 Unicode 编码的,所以在多种编程语言中都可以使用。

  • 缺点

    1. 仅支持 ASCII 字符集:escape 和 unescape 函数只能处理 ASCII 字符,对于非 ASCII 字符(如中文、日文等)需要使用其他编码方式。

    2. 安全性问题:尽管 escape 可以对特殊字符进行编码,但它并不是一种安全的编码方式,因为它并不能完全保护数据免受攻击。在处理用户输入时,应该使用更安全的编码方式,如 encodeURIComponent 或使用服务器端的编码方法。

    3. 不可逆性:escape 和 unescape 是一种简单的编码解码方式,它们是一对一的关系,无法进行数据压缩或加密,也无法恢复被修改的编码结果。

  • 简单实现

    // 编码
    let str_to_escape = escape(str)
    console.log(str_to_escape);
    // 解码
    let escape_to_str = unescape(str_to_escape)
    console.log(escape_to_str);
    

五、AES/DES加解密算法

  • 简介:AES是一种高级加密标准,用于保护敏感数据。它支持128位、192位和256位的密钥长度。AES使用替代/置换网络进行加密,包括四种不同的运算:字节替代、行移位、列混淆和轮密钥加。由于AES使用的操作通常是高效的,因此它比DES更安全且更快。

    DES是最早广泛使用的对称加密算法之一。它使用56位的密钥,并将数据分成64位的块进行加密。DES采用迭代的结构,重复16轮加密过程。每轮使用不同的子密钥对数据块进行变换。然而,由于DES密钥长度较短,因此易受到暴力破解和密码分析的攻击。

  • AES 的优点

    1. 更高的安全性:AES采用更长的密钥长度(128位、192位或256位),提供更高的安全性。

    2. 快速加密/解密速度:由于AES使用的操作较为简单且高效,在相同硬件上与DES相比,AES可以提供更快的加密和解密速度。

    3. 灵活性:AES支持不同的密钥长度,可以根据安全需求进行调整。

  • AES 的缺点

    1. 硬件实现的复杂性:相较于DES,实现AES算法所需的硬件更为复杂,这可能导致一些应用的性能下降。

    2. 密钥管理:由于AES支持多种密钥长度,对密钥的管理可能会更加复杂。

  • DES 的优点

    1. 简单:DES的算法较为简单,易于实现和使用。

    2. 兼容性:由于DES已经被广泛采用并成为密码学标准,在一些遗留系统中仍然使用。

  • DES 的缺点

    1. 安全性较低:由于DES密钥长度较短,易受到暴力破解和密码分析的攻击。

    2. 过时的技术:DES的密钥长度和算法设计已经过时,不再被推荐用于保护敏感数据。

  • 简单实现

    const CryptoJS = require('./crypto-js-3.1.2/package') // CryptoJS中还包含其他各类加密算法
    const aseKey = "outmanAK" // 秘钥必须为:8/16/32位
    //加密
    var str_to_aes = CryptoJS.AES.encrypt(str, CryptoJS.enc.Utf8.parse(aseKey), {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7
    }).toString();
    console.log(str_to_aes);
    //解密
    var aes_to_des = CryptoJS.AES.decrypt(str_to_aes, CryptoJS.enc.Utf8.parse(aseKey), {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7
    }).toString(CryptoJS.enc.Utf8);
    console.log(aes_to_des);

相关文章:

【前端知识】前端加密算法(base64、md5、sha1、escape/unescape、AES/DES)

前端加密算法 一、base64加解密算法 简介:Base64算法使用64个字符(A-Z、a-z、0-9、、/)来表示二进制数据的64种可能性,将每3个字节的数据编码为4个可打印字符。如果字节数不是3的倍数,将会进行填充。 优点&#xff1…...

leetcode 925. 长按键入

2023.9.7 我的基本思路是两数组字符逐一对比,遇到不同的字符,判断一下typed与上一字符是否相同,不相同返回false,相同则继续对比。 最后要分别判断name和typed分别先遍历完时的情况。直接看代码: class Solution { p…...

[CMake教程] 循环

目录 一、foreach()二、while()三、break() 与 continue() 作为一个编程语言&#xff0c;CMake也少不了循环流程控制&#xff0c;他提供两种循环foreach() 和 while()。 一、foreach() 基本语法&#xff1a; foreach(<loop_var> <items>)<commands> endfo…...

Mojo安装使用初体验

一个声称比python块68000倍的语言 蹭个热度&#xff0c;安装试试 系统配置要求&#xff1a; 不支持Windows系统 配置要求: 系统&#xff1a;Ubuntu 20.04/22.04 LTSCPU&#xff1a;x86-64 CPU (with SSE4.2 or newer)内存&#xff1a;8 GiB memoryPython 3.8 - 3.10g or cla…...

艺术与AI:科技与艺术的完美融合

文章目录 艺术创作的新工具生成艺术艺术与数据 AI与互动艺术虚拟现实&#xff08;VR&#xff09;与增强现实&#xff08;AR&#xff09;机器学习与互动性 艺术与AI的伦理问题结语 &#x1f389;欢迎来到AIGC人工智能专栏~艺术与AI&#xff1a;科技与艺术的完美融合 ☆* o(≧▽≦…...

Android常用的工具“小插件”——Widget机制

Widget俗称“小插件”&#xff0c;是Android系统中一个很常用的工具。比如我们可以在Launcher中添加一个音乐播放器的Widget。 在Launcher上可以添加插件&#xff0c;那么是不是说只有Launcher才具备这个功能呢&#xff1f; Android系统并没有具体规定谁才能充当“Widget容器…...

探索在云原生环境中构建的大数据驱动的智能应用程序的成功案例,并分析它们的关键要素。

文章目录 1. Netflix - 个性化推荐引擎2. Uber - 实时数据分析和决策支持3. Airbnb - 价格预测和优化5. Google - 自然语言处理和搜索优化 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专…...

jupyter 添加中文选项

文章目录 jupyter 添加中文选项1. 下载中文包2. 选择中文重新加载一下&#xff0c;页面就变成中文了 jupyter 添加中文选项 1. 下载中文包 pip install jupyterlab-language-pack-zh-CN2. 选择中文 重新加载一下&#xff0c;页面就变成中文了 这才是设置中文的正解&#xff…...

系列十、Java操作RocketMQ之批量消息

一、概述 RocketMQ可以一次性发送一组消息&#xff0c;那么这一组消息会被当做一个消息进行消费。 二、案例代码 2.1、pom 同系列五 2.2、RocketMQConstant 同系列五 2.3、BatchConsumer package org.star.batch.consumer;import cn.hutool.core.util.StrUtil; import lom…...

leetcode1两数之和

题目&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你…...

近年GDC服务器分享合集(四): 《火箭联盟》:为免费游玩而进行的扩展

如今&#xff0c;网络游戏采用免费游玩&#xff08;Free to Play&#xff09;加内购的比例要远大于买断制&#xff0c;这是因为前者能带来更低的用户门槛。甚至有游戏为了获取更多的用户&#xff0c;选择把原来的买断制改为免费游玩&#xff0c;一个典型的例子就是最近的网易的…...

android反射详解

1&#xff0c;反射的定义 一般情况下&#xff0c;我们使用某个类时必定知道它是什么类&#xff0c;是用来做什么的&#xff0c;并且能够获得此类的引用。于是我们直接对这个类进行实例化&#xff0c;之后使用这个类对象进行操作。 反射则是一开始并不知道我要初始化的类对象是…...

Python 反射和动态执行

反射主要应用于类的对象上&#xff0c;在运行时&#xff0c;将对象中的属性和方法反射出来&#xff0c;通过字符串对对象成员&#xff08;属性、方法&#xff09;进行查找、获取、删除、添加成员等动作&#xff0c;是一种基于字符串的事件驱动技术。 python是一门动态语言&…...

计算机网络常见端口号

端口号标识了一个主机上进行通信的不同的应用程序。比如网站服务器80端口一般都是开启的&#xff0c;等你来连接。 端口划分&#xff1a; &#xff08;1&#xff09;常用端口&#xff0c;公共端口&#xff08;保留给公共服务所使用&#xff09;&#xff0c;端口号为0-1023之间…...

SpringBoot / Vue 对SSE的基本使用(简单上手)

一、SSE是什么&#xff1f; SSE技术是基于单工通信模式&#xff0c;只是单纯的客户端向服务端发送请求&#xff0c;服务端不会主动发送给客户端。服务端采取的策略是抓住这个请求不放&#xff0c;等数据更新的时候才返回给客户端&#xff0c;当客户端接收到消息后&#xff0c;…...

Qt串口基本设置与协议收发

前言 1.一直都想要做一个Qt上位机&#xff0c;趁着这个周末有时间&#xff0c;动手写一下 2.comboBox没有点击的信号&#xff0c;所以做了一个触发的功能 3.Qt的数据类型很奇怪&#xff0c;转来转去的我也搞得很迷糊 4.给自己挖个坑&#xff0c;下一期做一个查看波形的上位…...

interview3-微服务与MQ

一、SpringCloud篇 &#xff08;1&#xff09;服务注册 常见的注册中心&#xff1a;eureka、nacos、zookeeper eureka做服务注册中心&#xff1a; 服务注册&#xff1a;服务提供者需要把自己的信息注册到eureka&#xff0c;由eureka来保存这些信息&#xff0c;比如服务名称、…...

kafka详解一

kafka详解一 1、消息引擎背景 根据维基百科的定义&#xff0c;消息引擎系统是一组规范。企业利用这组规范在不同系统之间传递语义准确的消息&#xff0c;实现松耦合的异步式数据传递. 即&#xff1a;系统 A 发送消息给消息引擎系统&#xff0c;系统 B 从消息引擎系统中读取 A…...

Flutter yuv 转 rgb

1、引用yuv_converter库 yuv_converter: ^0.0.1 2、导入头文件&#xff1a; import package:yuv_converter/yuv_converter.dart;3、yuv转rgb YuvConverter.yuv420NV21ToRgba8888(yuvRawData, 512, 512) 根据yuv格式选择不同的api。 举个例子&#xff1a; void initState() …...

MySQL——子查询

2023.9.8 相关学习笔记&#xff1a; #子查询 /* 含义&#xff1a; 出现在其他语句中的select语句&#xff0c;称为子查询或内查询 外部的查询语句&#xff0c;称为主查询或外查询分类&#xff1a; 按子查询出现的位置&#xff1a;select后面&#xff1a;仅仅支持标量子查询fro…...

Java学习笔记---多态

面向对象三大特征之一&#xff08;继承&#xff0c;封装&#xff0c;多态&#xff09; 多态的应用场景&#xff1a;根据传递对象的不同&#xff0c;调用不同的show方法 一、多态的定义 同类型的对象&#xff0c;表现出的不同形态&#xff08;对象的多种形态&#xff09; 二…...

2023-09-10 LeetCode每日一题(课程表 II)

2023-09-10每日一题 一、题目编号 210. 课程表 II二、题目链接 点击跳转到题目位置 三、题目描述 现在你总共有 numCourses 门课需要选&#xff0c;记为 0 到 numCourses - 1。给你一个数组 prerequisites &#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示在…...

合并区间【贪心算法】

合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 class Solution {public int[][] merge(int[…...

2023,软件测试人的未来在哪里?

2023年&#xff0c;IT行业出现空前的萧条&#xff0c;首先是年初一开始各大厂像着了魔似的不约而同的纷纷裁员、降薪、奖金包缩水&#xff0c;随之而来的是需求萎缩&#xff0c;HC减少或封锁等等。 而有幸未被列入裁员名单的在职人员&#xff0c;庆幸之余也心有余悸&#xff0…...

Python中的Numpy向量计算(R与Python系列第三篇)

目录 一、什么是Numpy? 二、如何导入NumPy? 三、生成NumPy数组 3.1利用序列生成 3.2使用特定函数生成NumPy数组 &#xff08;1&#xff09;使用np.arange() &#xff08;2&#xff09;使用np.linspace() 四、NumPy数组的其他常用函数 &#xff08;1&#xff09;np.z…...

LeetCode刷题笔记【27】:贪心算法专题-5(无重叠区间、划分字母区间、合并区间)

文章目录 前置知识435. 无重叠区间题目描述参考<452. 用最少数量的箭引爆气球>, 间接求解直接求"重叠区间数量" 763.划分字母区间题目描述贪心 - 建立"最后一个当前字母"数组优化marker创建的过程 56. 合并区间题目描述解题思路代码① 如果有重合就合…...

nvidia-smi 命令详解

nvidia-smi 命令详解 1. nvidia-smi 面板解析2. 显存与GPU的区别 Reference: nvidia-smi命令详解 相关文章&#xff1a; nvidia-smi nvcc -V 及 CUDA、cuDNN 安装 nvidia-smi(NVIDIA System Management Interface) 是一种命令行实用程序&#xff0c;用于监控和管理 NVIDIA G…...

fork()函数的返回值

在程序中&#xff0c;int pd fork() 是一个典型的 fork() 调用。fork() 函数会创建一个新的进程&#xff0c;然后在父进程中返回子进程的进程ID&#xff08;PID&#xff09;&#xff0c;在子进程中返回0。所以 pd 的值会根据当前进程是父进程还是子进程而有所不同&#xff1a;…...

Stable Diffusion WebUI挂VPN不能跑图解决办法(Windows)

如何解决SD在打开VPN的状态不能运行的问题 在我们开VPN的时候会出现无法生成图片&#xff0c;也无法做其他任何事&#xff0c;这个时候是不是很着急呢&#xff1f; 别急&#xff0c;我这里会说明如何解决。 就像这样&#xff0c;运行半天生成不了图&#xff0c;有时还会出现…...

Android的本地数据

何为本地&#xff0c;即写完之后除非手动修改&#xff0c;否像嘎了一样在那固定死了 有些需求可能也会要求我们去写死数据&#xff0c;因为这需求是一成不变的&#xff0c;那么你通常会用什么方法写死呢&#xff1f; 1. 本地存储-SharedPreferences 此方法可以长时间保存于手…...

258做网站靠谱么/网络营销是什么意思?

Android中如何判断系统当前是否处于飞行模式中&#xff1a;public static boolean IsAirModeOn(Context context) {return (Settings.System.getInt(context.getContentResolver(),Settings.System.AIRPLANE_MODE_ON, 0) 1 ? true : false);}如何切换飞行模式public static v…...

网站制作后台怎么做/最近新闻大事

文|魏启扬 来源|智能相对论&#xff08;aixdlun&#xff09; 继蔚来和理想先后上市&#xff0c;小鹏汽车不久前赴美递交招股书后&#xff0c;威马汽车也加快了上市的步伐。 9月22日&#xff0c;威马汽车官宣完成总额100亿人民币D轮融资&#xff0c;这也是造车新势力史上最大…...

免费网站建设公司/上海关键词推广

“Shift空格” 是全角和半角的切换...

临漳 网站建设/老铁seo外链工具

香港服务器防攻击能力怎么样 一个很强的防攻击能力的香港服务器可能吗&#xff1f;我们在购买香港服务器时&#xff0c;都希望能够购买一个香港服务器防攻击能力很强的那样一个服务器。但是&#xff0c;很多时候&#xff0c;我们在各个服务器商那里去咨询的时候&#xff0c;都…...

西乡做网站公司/查域名注册详细信息查询

小目录链接题目描述样例输入样例输出思路代码链接 YbtOJ高效进阶 哈希-1 题目描述 如题&#xff0c;给定 N个字符串&#xff08;字符串内包含数字、大小写英文字母&#xff09;&#xff0c;请求出 N个字符串中共有多少个不同的字符串。 样例输入 5 abc aaaa abc abcc 1234…...

网站难做/谷歌seo关键词优化

吃透HTTP权威指南 第三章 HTTP报文 **定个小目标&#xff0c;吃透这本书&#xff0c;每天最少一章 CSDN 见**报文流 HTTP报文&#xff0c;用来“包裹”HTTP数据的箱子&#xff0c; HTTP报文是在HTTP应用之间发送的数据块&#xff0c;是一些以文本形式的数据&#xff0c;描述了…...