|
本文作者系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运算过程的具体解释constcrypto=require('crypto');functionmd5Hash(data){returncrypto.createHash('md5').update(data,'utf8')//使用utf8编码进行更新.digest('hex');//输出为十六进制字符串}//使用示例constinput='Hello,World!';consthash=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 是第一个能同时用于 加密 和 数字签名 的算法,它能够 抵抗 到目前为止已知的 所有密码攻击。下面我们就通过对字母C来具体实现下 RSA 的过程我们上图的加密和解密过程其实可以用两个简单的公式来表达:我们把公钥记作(E,N),私钥记作(D,N)其中E,D,N 这三个数字并不是随便选取的的,其选取和计算规则因为设计到较多的数学知识,所以我们就在这里就再展开讲解。应用因为非对称加密较慢,但是相对对称加密更加的安全,所以常用于HTTPS 协议中的密钥交换,以及数字签名。-END-如果您关注前端+AI 相关领域可以扫码进群交流扫码进群2或添加小编微信进群1关于奇舞团奇舞团是 360 集团最大的大前端团队,非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。
|
|