JavaScript 常见编码与加密技术详解:Base64、MD5、AES 及工作模式

作者:巡夜人

时间:2026-10-25

浏览:566

本文深入解析 JavaScript 中的常见编码与加密方式。涵盖 Base64 编码原理、MD5 哈希特性及加盐机制,重点阐述 AES 对称加密的密钥长度、填充模式(如 PKCS7)与工作模式(CBC、ECB 等)的区别,并介绍 RSA 等非对称加密在 JS 中的应用场景与实现库。

文章目录

Base64 是一种常见的编码方式,主要用于将二进制数据转换为文本格式,便于在网络传输中处理。

#特征:结尾可能有"=="号
#编码
# 想将字符串转编码成base64,要先将字符串转换成二进制数据
url = "https://www.cnblogs.com/songzhixue/"
bytes_url = url.encode("utf-8")
str_url = base64.b64encode(bytes_url)  # 被编码的参数必须是二进制数据
print(str_url)
b'aHR0cHM6Ly93d3cuY25ibG9ncy5jb20vc29uZ3poaXh1ZS8='
#解码
# 将base64解码成字符串
import base64
url = "aHR0cHM6Ly93d3cuY25ibG9ncy5jb20vc29uZ3poaXh1ZS8="
str_url = base64.b64decode(url).decode("utf-8")
print(str_url)
'https://www.cnblogs.com/songzhixue/'

MD5(Message-Digest Algorithm 5)是一种哈希算法,生成固定长度的摘要,常用于数据完整性校验。

#注意:md5是哈希,不是加密
#特征:32位
#1.编码
md = hashlib.md5()   #  加密,不可逆
md.update('hello'.encode('utf-8'))   # 往对象里传数据加密  ,update只能接受bytes类型
md.update(b'hello')
print(md.hexdigest())
结果:23b431acfeb41e15d466d75de822307c

#编码加盐
#2.加盐  :自己添加的东西和客户的真密码一起加密,自己添加的东西可以是动态的
md = hashlib.md5()
md.update(b'yan.com')
md.update(b'hello')   # 加密
print(md.hexdigest())  # 获取密文

AES(Advanced Encryption Standard)即高级加密标准,是目前广泛使用的对称加密算法。

Base64 是一种常见的编码方式,主要用于将二进制数据转换为文本格式,便于在网络传输中处理。

AES 属于对称加密,其核心特征是加密和解密过程使用相同的密钥。由于无需复杂的密钥交换计算,对称加密在处理大量数据时速度最快、实现也相对简单。

鉴于其高效性,对称加密非常适合需要频繁发送大量数据的业务场景。

非对称加密则使用不同的密钥进行加密和解密。虽然其加密和解密速度相对较慢,但优势在于密钥传输更加便捷安全,因此更适合偶尔发送数据或对安全性要求极高的场合。

在使用 AES 进行加密时,需要确定三个关键要素:密钥、填充模式和工作模式。

密钥长度通常支持 128、192 或 256 位,不同的长度对应不同的安全等级和性能表现。

填充模式用于处理明文长度不是块大小整数倍的情况,常见的填充方式包括:NoPadding、PKCS7Padding、ZeroPadding、AnsiX923、Iso10126 以及 Iso97971。

工作模式决定了明文块如何被加密,常见的工作模式有:CBC、ECB、CTR、CFB 和 OFB。

不同的工作模式在安全性、性能和应用场景上存在显著差异,需根据实际需求选择。

常见的工作模式包括:CBC、ECB、CTR、CFB 和 OFB。

ECB(Electronic Codebook)模式是最基础的工作模式。

其实现逻辑相对简单,易于理解和初步实现。

由于每个块独立加密,ECB 模式有利于并行计算,从而在某些硬件环境下提升处理速度。

然而,ECB 模式存在明显的安全缺陷:相同的明文块加密后会生成相同的密文块,这使得攻击者可能通过观察密文结构推断出明文信息,因此其安全性较差,不推荐用于敏感数据加密。

CBC(Cipher Block Chaining)模式通过引入初始化向量(IV)将前一个密文块与当前明文块进行异或操作后再加密。

由于每个块的加密依赖于前一个块的结果,CBC 模式无法进行并行计算,因此在性能上通常不如 ECB 模式。

CBC 模式引入了初始化向量(IV),增加了加密过程的复杂度,使得相同的明文在不同加密操作中产生不同的密文。

得益于其链式结构,CBC 模式能够有效隐藏明文模式,具有较高的安全性,是实际应用中推荐使用的模式之一。

AES 加密的基本流程包括以下几个步骤:

首先,将明文数据按照 128 位(16 字节)的大小拆分成若干个明文块。

接着,根据所选的填充模式对最后一个明文块进行填充,确保其长度符合加密块的大小要求。

最后,利用 AES 加密器和指定的密钥,对每个明文块进行加密,生成对应的密文块。

在 JavaScript 环境中,可以使用诸如 crypto-js 等库来实现 AES、Base64、SHA256 和 RSA 等加解密功能。

#利用nodejs中的crypto-js库
var CryptoJS = require("crypto-js")
CryptoJS.AES.encrypt(text,CryptoJS.enc.UTF8.parse(key),data={})

理解 AES 的特点及其配置参数对于正确实现加密至关重要。

如果配置中包含初始化向量(IV),这通常是 CBC 工作模式的特征,用于确保加密的随机性和安全性。

配置中的 mode 和 padding 参数分别指定了加密的工作模式和填充方式,直接影响加密结果。

iv 代表初始向量(Initialization Vector),用于 CBC 等模式以增加随机性。

mode 代表工作模式(Mode),如 ECB、CBC 等,决定加密算法的运行方式。

padding 代表填充方式(Padding),如 PKCS7,用于处理数据块长度对齐问题。

ASCII 码是一种字符编码标准。

ASCII 码主要流行于欧洲国家,能够表达 128 个常见字符及操作符,但其表达力有限,无法涵盖所有语言字符。

DES(Data Encryption Standard)即数据加密标准,是一种早期的对称加密块算法。

DES 于 1977 年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。

需要注意的是,在某些文献中,作为算法的 DES 称为数据加密算法(Data Encryption Algorithm, DEA),这与作为标准的 DES 有所区分,但在实际应用中常混用。

以上就是 JS 中常见编码及加密方式解析的详细内容,更多关于 JS 编码及加密方式的资料请关注本站其它相关文章!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章