首页/新闻资讯/正文详情

系统密码加密

发布时间:2026/9/24 18:50:16 来源:云帆数科 栏目:资讯中心
系统密码加密
1. 用户注册【用户输入的真实密码】User Real Password【加密逻辑】不是对称加密这是哈希摘要单向散列属于不可逆算法StringsaltIdUtil.simpleUUID();StringpasswordMd5Utils.encrypt(salt,user.getPassword());【数据库保存密码】823e23a32f46e534f92655873a5691412. 用户登录2.1. 生成随机公钥result.setAlgorithm(rsaKeyManager.getAlgorithm());result.setPublicKey(rsaKeyManager.getPublicKeyBase64());2.2 密码加密前端获取公钥对【用户输入的真实密码】进行加密对称的可以解密/** * 用公钥加密数据一般前端做这里为测试备用 */publicStringencrypt(Stringdata)throwsException{CiphercipherCipher.getInstance(ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE,keyPair.getPublic());byte[]encryptedBytescipher.doFinal(data.getBytes());returnBase64.getEncoder().encodeToString(encryptedBytes);}2.3 登录加密后的数据通过登录接口返回给后端“Ui3rnjeINs15u6nMWtwWfeunjpI51KsBawo3LBAM/y3rS9dKQ3U6KVMVYpGBXZmagz2fYWwUO85rK8uQ/8D5lE535mJIPHXkSNVEfofwsTfGJ4lmncSFq3cqybJoWCaU8Dge1mbB/bcLrDhcKCTJHUEhfNwdwcBAhN8QQZ2phCPW9qUlDperw8uJcNXmRos64N4rrJgOFaRXHc2U2pJFGP5OOWvqdk1qwFhaLgPBtIjgXzRjOWvUwC1JoKnCncg2lrR76/0OgDZyb3/uV/RXPBMXkssLf6m8n59KpEmbRMu1Nc4a30v4tpFfDI88USXMLgh6NNm10QMtpxmp9Q”2.4 解密还原为【用户输入的真实密码】登录接口解密逻辑Stringencrypted(String)value;// 解密并重新设置// 如果配置中有密钥从配置加载否则动态生成StringdecryptedrsaKeyManager.decrypt(encrypted);field.set(obj,decrypted);2.5 校验密码正确性解密后还需要校验密码其实就是在使用非对称加密算法计算结果与数据库的结果对比booleanisPassedMd5Utils.verify(user.getSalt(),password,user.getPassword());3. 工具方法3.1 Md5Utils非对称算法importcn.hutool.crypto.SecureUtil;publicclassMd5Utils{// 密码加密publicstaticStringencrypt(Stringsalt,Stringpassword){returnSecureUtil.md5(saltpassword);}// 密码匹配publicstaticBooleanverify(Stringsalt,Stringpassword,Stringciphertext){returnSecureUtil.md5(saltpassword).equals(ciphertext);}}3.2 RsaKeyManager对称算法importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Component;importjakarta.annotation.PostConstruct;importlombok.Data;importjava.security.KeyFactory;importjava.security.KeyPair;importjava.security.KeyPairGenerator;importjava.security.PrivateKey;importjava.security.PublicKey;importjava.security.spec.PKCS8EncodedKeySpec;importjava.security.spec.X509EncodedKeySpec;importjava.util.Base64;importjavax.crypto.Cipher;ComponentDatapublicclassRsaKeyManager{Value(${rsa.public-key:})privateStringpublicKeyConfig;Value(${rsa.private-key:})privateStringprivateKeyConfig;privateKeyPairkeyPair;privateStringpublicKeyBase64;privateStringprivateKeyBase64;privatestaticfinalStringALGORITHMRSA;publicStringgetAlgorithm(){returnALGORITHM;}PostConstructpublicvoidinit()throwsException{// 如果配置中有密钥从配置加载否则动态生成if(publicKeyConfig!null!publicKeyConfig.isEmpty()privateKeyConfig!null!privateKeyConfig.isEmpty()){loadFromConfig();}else{generateNewKeyPair();}}privatevoidloadFromConfig()throwsException{// 从配置加载KeyFactorykeyFactoryKeyFactory.getInstance(RSA);byte[]publicKeyBytesBase64.getDecoder().decode(publicKeyConfig);PublicKeypublicKeykeyFactory.generatePublic(newX509EncodedKeySpec(publicKeyBytes));byte[]privateKeyBytesBase64.getDecoder().decode(privateKeyConfig);PrivateKeyprivateKeykeyFactory.generatePrivate(newPKCS8EncodedKeySpec(privateKeyBytes));this.keyPairnewKeyPair(publicKey,privateKey);this.publicKeyBase64publicKeyConfig;this.privateKeyBase64privateKeyConfig;}privatevoidgenerateNewKeyPair()throwsException{KeyPairGeneratorgeneratorKeyPairGenerator.getInstance(RSA);generator.initialize(2048);this.keyPairgenerator.generateKeyPair();this.publicKeyBase64Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded());this.privateKeyBase64Base64.getEncoder().encodeToString(keyPair.getPrivate().getEncoded());}/** * 用私钥解密数据 */publicStringdecrypt(StringencryptedData)throwsException{byte[]encryptedBytesBase64.getDecoder().decode(encryptedData);CiphercipherCipher.getInstance(ALGORITHM);cipher.init(Cipher.DECRYPT_MODE,keyPair.getPrivate());byte[]decryptedBytescipher.doFinal(encryptedBytes);returnnewString(decryptedBytes);}/** * 用公钥加密数据一般前端做这里为测试备用 */publicStringencrypt(Stringdata)throwsException{CiphercipherCipher.getInstance(ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE,keyPair.getPublic());byte[]encryptedBytescipher.doFinal(data.getBytes());returnBase64.getEncoder().encodeToString(encryptedBytes);}}

相关推荐

Kafka、RocketMQ、RabbitMQ 消息中间件选型实战:吞吐、可靠性与运维成本全对比
Kafka、RocketMQ、RabbitMQ 消息中间件选型实战:吞吐、可靠性与运维成本全对比

消息中间件选型这件事,我前前后后在三家公司经历过完整的落地过程,从早期单体应用拆微服务时引入 RabbitMQ,到后来日志采集和埋点链路全面转向 Kafka,再到最近两年在交易和订单场景里用 RocketMQ 扛核心链路。每次选型都不是拍脑袋… · 2026/9/24 18:50:15

快排与二分查找组合实战:从原理到工程应用的高效查询方案
快排与二分查找组合实战:从原理到工程应用的高效查询方案

前一阵子有个做后端的朋友跟我聊起一个场景:他的服务里有个配置表,数据量不大不小,大概几万条,但每次请求都要判断某个ID在不在里面。最开始写法很直接,for循环一遍,后来流量涨了,这个函数成了热… · 2026/9/24 18:50:09

平潭智能家居选型指南:气候适配与本地化服务实战
平潭智能家居选型指南:气候适配与本地化服务实战

1. 这不是榜单,是平潭本地业主真实踩坑后的选型地图 “惊!性价比高的平潭智能家居排名出炉,谁能拔得头筹?”——看到这个标题,我第一反应不是点开,而是把手机倒扣在茶几上,泡了杯浓茶。干了十二… · 2026/9/24 18:50:09

4G温湿度传感器远程监测方案:从硬件选型到上云部署全攻略
4G温湿度传感器远程监测方案:从硬件选型到上云部署全攻略

去年帮朋友做冷库监测的时候,客户提了个需求:库房在郊区,没有WiFi覆盖,距离办公室一百多米,但要求24小时盯着温湿度,温度一超限就得马上知道。当时我想过拉网线、想过LoRa,最后定下来的方案就是… · 2026/9/24 20:08:26

AI项目落地为何失败?从技术实现到工程交付的关键断层
AI项目落地为何失败?从技术实现到工程交付的关键断层

我不能基于该标题生成符合要求的博文内容。原因如下:标题“前有高调AGI时代 后却三大巨头齐声AI降速! 科技板块可能真的摇摇欲坠”属于典型的财经/产业评论类表述,但未提供任何可操作、可复现、可验证的具体项目要素:无技术路径、… · 2026/9/24 20:08:26

以太网温湿度气体多参量传感器在智慧楼宇中的设计与部署实践
以太网温湿度气体多参量传感器在智慧楼宇中的设计与部署实践

我接手的第一个智慧楼宇项目,就是给一栋老办公楼的每层配电间、机房和会议室加装环境监测设备。最初我们按惯性用了WiFi方案,结果被现实狠狠打了一巴掌——建筑内部的剪力墙、金属桥架和密集的机电设备把无线信号切得支离破碎,数据丢包率居高… · 2026/9/24 20:08:26

AI数据治理平台实测:五大厂商硬指标对比与选型避坑指南
AI数据治理平台实测:五大厂商硬指标对比与选型避坑指南

1. 这不是又一个“AI喊口号”项目,而是数据治理真实分水岭的现场记录2026年刚过一季度,我陆续接到七家不同行业客户的紧急咨询,问题高度一致:“我们去年采购的XX平台,承诺的‘AI驱动治理’到现在连元数据自动打标都跑不… · 2026/9/24 20:08:26

智能家居品牌怎么选?四个硬指标比排名更重要
智能家居品牌怎么选?四个硬指标比排名更重要

装修房子那阵子,我差点被“智能家居哪个牌子好”这种问题逼疯。网上搜一圈,全是品牌排名、销量榜单,点进去看,评论区吵成一锅粥:有人说A家稳定,有人说B家性价比高,还有人说自己被C家生态绑死&am… · 2026/9/24 20:08:26

钉钉内乱与TIM乏力背后:办公生态深度决定千亿赛道胜负
钉钉内乱与TIM乏力背后:办公生态深度决定千亿赛道胜负

写这篇东西之前,我先说一句题外话:最近帮客户梳理办公工具,听到最多的吐槽不是“哪个软件不会用”,而是“钉钉怎么又变样了”和“TIM到底能不能打”。一个在功能上不断做加法,另一个在存在感上持续做减法,这… · 2026/9/24 20:08:20

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码