首页 > 编程知识 正文

前端登录加密和后端解密,前端aes与rsa密钥管理与存储

时间:2023-05-04 16:31:05 阅读:111354 作者:927

AES是最常见的对称(加密和解密时使用相同的密钥)加密算法。 crypto模块提供了AES支持,但需要自己封装函数以方便使用。

AES加密过程

明文:未加密数据。密钥K:用于加密明文的密码。 在对称加密算法中,加密和解密的密钥是相同的。 虽然密钥是为了接收方和发送方的协议而生成的,但是不能直接在网络上传输。 否则会导致密钥泄露。 通常先用不对称加密算法对密钥进行加密,然后通过网络传输给对方,或者直接面对面咨询密钥。 绝对不能泄露秘密密钥。 否则,攻击者会恢复密文并窃取机密数据。 3358 www.Sina.com/:如果AES加密函数为e,则c=e(k,p )。 其中,p是明文,k是私钥,c是密文。 即,当将明文p和密钥k作为加密函数的参数输入时,加密函数e输出密文c。AES加密函数:由加密函数处理的数据密文C:假设AES解密函数为d,则p=d(k,c )。 其中,c是密文,k是加密密钥,p是明文。 也就是说,当把密文c和密钥k作为解密函数的参数输入时,解密函数输出明文p。 AES的基本结构AES是组密码,组密码是指将明文分成一组,每组长度相等,每次加密一组数据,直到加密所有组。 在AES标准规范中,分组长度限制为128位。 这意味着每个数据包有16个字节。 密钥长度也支持128位、192位或256位。 建议的加密回合数因密钥长度而异。 下表:

AES-128密钥长度为128位,加密循环数为10个。 AES的加密公式为c=e(k,p ),加密函数e执行循环函数,执行10次。 此循环函数的前9次执行操作相同,只有第10次不同。 这意味着明文数据包将被加密10次。 AES的核心是实现一轮的所有操作。

AES的处理单位为字节,128位输入明文分组p和输入密钥k均分为16字节,分别表示为P=P0 P1 … P15和K=K0 K1 … K15。 例如,明文组为P=abcdefghijklmnop,其中字符a与P0相对应,p与P15相对应。

AES程序代码1,安装模块

npm install crypto-js 2,crypto.js

import CryptoJS from 'crypto-js '; const key=crypto js.enc.utf8.parse (1234567890 ABC 765 ); //16位constiv=crypto js.enc.utf8.parse (123456789000000 ); //AES加密exportfunctionencrypt(word,keyStr,ivStr ) ) { let key=KEY,iv=IV,srcs,encrypted; if(keystr ) key=cryptojs.enc.utf8.parse ) keystr; iv=crypto js.enc.utf8 . encrypt (iv str ); } srcs=crypto js.enc.utf8.parse (word ); encrypted=crypto js.AES.encrypt (srcs,key,{ iv: iv,mode: CryptoJS.mode.EBC,padding3360cryptojs.pad ) 返回//base64格式的密文},//aesexportfunctiondecrypt (word,keyStr,ivStr ) {let key=KEY,iv=IV,base64,src,decrypt iv=crypto js.enc.utf8 . encrypt (iv str ); } base 64=crypto js.enc.base 64.parse (word ); src=crypto js.enc.base 64.stringify (base 64 ); decrypt=crypto js.AES.decrypt (srcs,key,{ iv: iv,mode: CryptoJS.mode.ECB,padding3360cryptojs.pad.) decrypted str=decrypt.tostring (crypto js.enc.utf8 ); return decryptedStr.toString (; } key是密钥,iv是密钥偏移,一般由接口返回,或者前后端协议一致。 请关注钥匙的长度。 对称解密使用AES-128-CBC算法,其中的key必须为16位,因为数据用PKCS#7填充。

3、使用

import { Encrypt } from 'crypto '; let new password=encrypt (password; 请注意,AES有多种算法,包括aes192、aes-128-ecb和aes-256-cbc。 在AES中,除了键外,还可以指定初始向量(iv )。 不同的系统具有不同的IV,则使用同一密钥加密相同的数据会产生不同的加密结果。

加密结果通常有两种表示方式: hex和base64,所有这些功能Nodejs都受支持。 但是,在APP应用中需要注意。 如果加密和解密两者都使用Nodejs,另一个使用其他语言(如Java和PHP ),则必须仔细测试。 如果无法正确解密,请验证两者是否符合相同的AES算法,字符串密钥和IV是否相同,以及加密数据是否统一为hex或base64格式。

参考资料

详细介绍和实现AES加密算法

廖雪峰官方网站

AES加密算法

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。