当前位置: 首页 > 后端技术 > Node.js

AES加密算法的节点应用

时间:2023-04-03 23:51:57 Node.js

AES属于对称加密算法的三要素:秘钥填充方式秘钥对称加密之所以对称是因为这类算法使用同一个秘钥进行加密和明文解密。AES支持三种不同长度的Key:128位128性能最好,192位256位256安全性最高,加密次数多。这三个不同长度的密钥在底层加密过程中要处理的加密轮数不同。填充AES加密块的特点:AES加密不是将明文加密成密文,而是将其一个一个拆分成独立的明文块,每个明文快块为128bit。假设一个明文块的长度是192bit,如果按照每个128bit拆分明文块,那么第二个明文块只有64bit,不足128bit。此时需要填充小于128bit的明文块。填充类型:NoPadding不做任何填充。要求明文必须是128bit的整数倍。Section,少了多少个字节,用相应的数字补上。比如少了5个,就会有5个5,少了6个,就会有6个6)1,2,3,4,5,6,2,3,4,5,4,4,4,4,#缺4个,用4补1,2,3,4,5,6,2,3,4,5,5,5,5,5#缺5个,用5补填写AnsiX923Iso10126Iso97971模式AES的工作模式,体现在明文块加密成密文块的过程。AES算法提供了5种工作模式:CBCEBCTRCFBOFB模式之间的主要思想是近似的,在处理细节上有一些差异。ECB模式:ECB(ElectronicCodeBookBook)是最简单的工作模式。在这种模式下,每个明文块的加密是完全独立的,互不干扰。优点:简单,有利于并行计算缺点:同一个明文块用同一个明文块加密,安全性较低CBC模式CBC模式(CipherBlockChaining)引入了一个新概念:初始向量IV(InitializationVector)IV与MD5中的“加盐”类似,目的是防止相同的明文被加密成相同的密文。CBC模式会在每个明文块加密之前,让明文块和一个值进行异或运算。IV作为初始化变量参与第一个明文块的异或,后续的每个明文块都与前一个明文块的加密密文进行异或。这样,同一个明文块的加密密文就明显不同了。优点:安全性高缺点:不能并行计算,性能不如ECB。初始化向量IV的引入增加了复杂性。加密过程总结:将明文按照128bit拆分成若干个明文块,按照选择的填充方式填充最后一个明文块。用AES加密器和密钥填充每个明文块加密成密文块并将所有密文块连接起来成为最终的密文结果示例:varCryptoJS=require("Crypto-js");functionaesEncrypto(text,key,iv){//加密密钥=CryptoJS.enc.Utf8.parse(key);iv=CryptoJS.enc.Utf8.parse(iv);varencrypted=CryptoJS.AES.encrypt(text,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7})varencrypted__=CryptoJS.enc.Utf8.parse(encryptoed)返回加密}functionaesDecrypto(encryptoed,key,iv){//解密密钥=CryptoJS.enc.Utf8.parse(key);iv=CryptoJS.enc.Utf8.parse(iv);varresult=CryptoJS.AES.decrypt(encryptoed,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7})返回结果.toString(CryptoJS.enc.Utf8)}vartext=“我爱蟒蛇”;//明文varkey="ABC123456789";//密钥variv="hehehehehehe";//ivvarencrypted=aesEncrypto(text,key,iv);console.log(encryptoed.toString());vardecod=aesDecrypto(encryptoed,key,iv);console.log(decod);