专栏名称: 奇舞精选
《奇舞精选》是由奇舞团维护的前端技术公众号。除周五外,每天向大家推荐一篇前端相关技术文章,每周五向大家推送汇总周刊内容。
目录
相关文章推荐
51好读  ›  专栏  ›  奇舞精选

常见的加密算法

奇舞精选  · 公众号  ·  · 2024-08-13 18:00

正文

本文作者系360奇舞团前端开发工程师


前言

密码学是一门研究信息加密和解密技术的科学,通过数学方法设计和分析加密算法和协议,以确保数据在传输和存储过程中的 保密性、完整性、真实性 不可否认性 。在前后端的各种重要交互场景中(登录,支付)往往都会用到一种或者多种加密算法,来保护用户的信息安全。

古代密码学

  • 凯撒密码

凯撒密码是一种替换加密方法,将字母表中的每个字母替换为其后固定位置的另一个字母。

  • 阴符和阴书

    阴符 是一种秘密符号或隐秘标记,用于传递重要信息。阴符通常只有发送者和接收者知道其具体含义和解码方式。阴符的具体形式和使用方式可以因时代和地域不同而有所变化。比如就是事先制作一些长度不同的竹片,然后约定好每个长度的竹片代表的内容:

    大胜克敌之符,长一尺;破军擒将之符,长九寸;

    阴书 是中国古代一种加密通信的方法,具体方法是将书信拆分成三部分,并分派三人发出,每人拿一部分,只有这三部分合在一起才能读懂信的内容,从而实现了机密的传递,敌人即使得到其中一部分也无法获知真实内容

现代密码学

现代密码学是保护信息安全的科学和技术,主要通过数学算法和计算机技术来实现数据的加密和解密。现代密码学广泛应用于电子商务、银行交易、网络通信、数据存储等领域。以下是现代密码学的主要内容和分类。

分类

  • 哈希(散列)函数

将任意长度的数据输入转换为固定长度的散列值,用于数据完整性校验和数字签名,比如MD5,SHA-1,SHA-256

  • 对称加密

使用相同的密钥进行加密和解密操作,比如DES,AES,SM4

  • 非对称加密

非对称加密算法使用一对密钥——公钥和私钥——分别进行加密和解密操作,RSA,ECC

散列函数

散列函数 (one-way hash function)是指对不同的输入值,通过单向散列函数进行计算,得到固定长度的输出值。这个输入值称为 原始值 (message),输出值称为 散列值 (hash value)。

MD5算法

MD5(Message Digest Algorithm 5)是一种广泛使用的加密散列函数,主要用于生成数据的唯一标识符或“指纹”。它的本质在于将任意长度的数据(消息)映射为固定长度的128位(16字节)的散列值。这个过程被称为散列(hashing),MD5的散列值通常以32个十六进制数字表示。

填充 :首先将输入数据填充至长度为448模512的比特数。填充的方式是将一个比特值1添加到数据末尾,然后添加0比特,直到数据长度为448比特。接着,再添加64比特来表示原始数据的长度,填充后的数据长度是512的倍数。

初始化 :使用四个32位的常量初始化四个缓冲区变量(A、B、C、D)。这些变量将用来存储最终的散列值。

处理每一块数据 :将填充后的数据分成若干个512比特的块,对每个块进行处理。每块数据通过16轮迭代计算,更新四个缓冲区变量的值。

输出结果 :将处理后的缓冲区变量值连接起来,生成128位的散列值。

下面这个图片,就是对 MD5运算过程的具体解释

const crypto = require('crypto');
function md5Hash(data) {
    return crypto.createHash('md5')
        .update(data, 'utf8')  // 使用utf8编码进行更新
        .digest('hex');        // 输出为十六进制字符串
}
// 使用示例
const input = 'Hello, World!';
const hash = md5Hash(input);

SHA256算法

SHA-256是由国家安全局(NSA)设计的加密散列函数,广泛用于数据完整性验证和密码学应用。

填充 :和前面提到的 MD5算法填充过程一样

初始化 :SHA-256算法使用8个32位的变量,初始化为特定的常数值。

处理每一块数据 :将填充后的数据分成若干个512比特的块,对每个块进行处理。每块数据通过16轮迭代计算,更新四个缓冲区变量的值。

输出结果 :将处理后的缓冲区变量值连接起来,生成128位的散列值。

应用

1.用户密码保护

用户在设置密码时,不记录密码本身,只记录密码的散列值,只有用户自己知道密码的明文。校验密码时,只要输入的密码正确,得到的散列值一定是一样的,表示校验正确。

2.接口参数校验

发送者与接收者要有一个 共享秘钥 。当发送者向接收者发送请求时,参数中附加上签名(签名由 共享秘钥 * +* 业务参数 ,进行单向散列函数加密生成)。接收者收到后,使用相同的方式生成签名,再与收到的签名进行比对,如果一致,验签成功

对称加密

对称加密是一种加密方法,其中加密和解密过程使用 相同的密钥 。这意味着加密数据时使用的密钥与解密数据时使用的密钥相同,从而确保只有持有该密钥的人能够访问原始数据。对称加密算法的主要特点是 速度快、效率高 ,但密钥管理是一个关键问题,因为密钥需要安全地分发和存储。

AES算法

分别解释下,上图中,所提到的相关概念

SubBytes

  • 过程 :使用S盒(Substitution box)对数据块中的每个字节进行替换。S盒是一个固定的替换表,将每个字节替换为另一字节,增加非线性特性。

ShiftRows

  • 过程 :对数据块的每一行进行循环移位。第一行不变,第二行左移1个字节,第三行左移2个字节,第四行左移3个字节。这增加了数据的混淆。

MixColumns

  • 过程 :对数据块的每一列进行混合。通过线性变换,使每列数据变成列的加权和,提高数据的扩散性(在最后一轮中省略此步骤)。

AddRoundKey

  • 过程 :将处理后的数据块与当前轮密钥进行异或操作。每轮使用不同的轮密钥,更新数据块。

轮密钥 :

  • 根据轮数的不同,根据单个原始的密钥行成一个密钥表,每一轮调用不同的密钥

应用

因为对称加密最大的优势是加密速度快,所以常用于我们 HTTPS 中大量数据的加解密,或者视频等实时通信中。

非对称加密

非对称加密算法,也被称作公钥加密算法,是一种加密机制,它依赖于一对密钥:一个是公开的密钥(public key),简称公钥;另一个是保密的密钥(private key),简称私钥。这种算法之所以被称为非对称,是因为加密和解密过程分别使用这对密钥中的不同成员。公钥可以广泛分享,用于加密信息或验证由私钥生成的数字签名;而私钥则必须严格保密,用于解密接收到的信息或创建数字签名。

RSA 算法

RSA加密算法是目前最有影响力的 公钥加密算法 ,并且被普遍认为是目前 最优秀的公钥方案 之一。RSA 是第一个能同时用于 加密 数字签名 的算法,它能够 抵抗 到目前为止已知的 所有密码攻击







请到「今天看啥」查看全文