我放弃 MD5 了:在 MySQL 里用“噪音池”实现比彩虹表还头疼的加密
我放弃 MD5 了在 MySQL 里用“噪音池”实现比彩虹表还头疼的加密文章目录我放弃 MD5 了在 MySQL 里用“噪音池”实现比彩虹表还头疼的加密一、事情是怎么开始的二、先吐槽一下传统的加密方案1. MD5 和它的朋友们2. AES 和它的朋友们3. 我想要什么三、我的核心思路三重任意Three-Any四、一个具体的例子看完你就懂了五、那如果多插几个呢六、这样做有什么好处七、那实现起来有多复杂表结构就两张加密一行 SQL查询密码一行 SQL八、普通程序员 vs 我九、它真的安全吗十、那有没有缺点十一、实际使用体验十二、总结十三、源码地址十四、评论区一、事情是怎么开始的事情是这样的。有一天我在 WPS 里写 JS 宏本来只是想给 Excel 加点“防同事偷看”的小功能。结果写着写着脑子里突然蹦出一个念头“如果加密的时候每次结果都不一样那彩虹表是不是直接就废了”于是我放下 WPS打开 MySQL开始了这场“密码存得像个分布式系统”的折腾之旅。二、先吐槽一下传统的加密方案1. MD5 和它的朋友们MD5 这东西大家都知道。好处是快坏处是彩虹表到处都是碰撞虽然概率低但存在最重要的是同一个密码永远是同一个 MD5这就好比你每次照相都穿同一件衣服、站同一个位置、摆同一个姿势。黑客只要见过你一次下次一眼就能认出你。2. AES 和它的朋友们AES 很安全但要管密钥密钥丢了就凉了太重了我只是想存个密码不是要保护核弹发射井加密结果还是确定性的密钥不变结果不变3. 我想要什么我想要一种不需要密钥每次加密结果都不一样解密简单到离谱彩虹表看了想骂人的加密方式。三、我的核心思路三重任意Three-Any我给这套方案起了个名字叫“Three-Any Cipher”。所谓“三重任意”就是重数名称说明第一重任意位置噪音字符插在原文的哪个位置随机第二重任意数量插 1 个还是 5 个随机第三重任意字符插什么字符从原文没出现过的字符里随机挑说白了就是往原文里随机塞几个“垃圾字符”然后把“垃圾字符”的清单单独存起来。解密的时候把垃圾删掉剩下的就是原文。四、一个具体的例子看完你就懂了假设原文是q23wrr4加密的时候系统随机决定插入 1 个噪音字符插入字符K插在第 6 个字符后面结果变成q23wKrr4然后系统把[K]存进噪音列表。解密的时候q23wKrr4 去掉 K q23wrr4完成。五、那如果多插几个呢同一个原文q23wrr4如果系统这次随机插了 4 个噪音q23wrVrud4噪音列表[V, , d, u]解密的时候q23wrVrud4 去掉 V → q23wrrud4 去掉 → q23wrrud4 去掉 d → q23wrru4 去掉 u → q23wrr4完美还原。六、这样做有什么好处特性效果同一密码每次加密结果不同彩虹表“我存哪个”没有固定公式攻击者“我是谁我在哪”解密就是一个 REPLACE代码简单到令人发指密文不含高危字符SQL 注入“我进不去啊”不存在碰撞两个密码不可能产生同一个密文七、那实现起来有多复杂说出来你可能不信。表结构就两张-- 用户表没有密码字段CREATETABLEusers(uidVARCHAR(64)PRIMARYKEY,usernameVARCHAR(50),nicknameVARCHAR(50),created_atDATETIME);-- 密码碎片表就这两列CREATETABLEpwd_ciphertext(uidVARCHAR(64),ciphertextTEXT,noise_chars JSON);加密一行 SQLCALLsp_encrypt_and_store(uuid_001,admin,nick,q23wrr4);查询密码一行 SQLSELECTfn_decrypt_simple(uuid_001)AS密码;八、普通程序员 vs 我场景普通程序员我存密码INSERT INTO users (password) VALUES (123456)CALL sp_encrypt_and_store(...)查密码SELECT password FROM usersSELECT fn_decrypt_simple(uid)描述架构“我们用了 MD5 加盐”“我们实现了跨单元联合编译的分布式碎片化密码存储协议”简历上写“熟悉数据库操作”“设计并实现基于噪音池的 Three-Any 抗彩虹表加密模型”九、它真的安全吗我们来对比一下攻击方式MD5AESThree-Any彩虹表能攻破常见密码不能但需要密钥不能没有固定映射碰撞攻击存在碰撞极难不存在密钥泄露不涉及全完蛋不需要密钥已知明文攻击能推导规律不能不能同事路过偷看能看到密文能看到密文能看到乱码十、那有没有缺点当然有。这世界上没有完美的方案。缺点说明密文比原文长原文 7 个字符密文可能 11 个需要额外存储噪音列表多一个 JSON 字段目前只支持 ASCII 字符中文还没支持下次升级如果噪音列表丢了密文就永远解不开了但这不就是安全感的代价吗十一、实际使用体验我已经在 MySQL 里跑了一段时间效果如下-- 添加用户CALLsp_encrypt_and_store(uuid_007,user7,nick7,q23wrr4);-- 查看结果SELECT*FROMpwd_ciphertextWHEREuiduuid_007;输出uidciphertextnoise_charsuuid_007q23wKrr4[“K”]-- 解密SELECTfn_decrypt_simple(uuid_007);-- 返回q23wrr4每次加密结果都不同但解密始终正确。十二、总结这套方案的核心理念就一句话“加密的时候随便造解密的时候认真删。”它不追求数学上的绝对安全而是通过“随机性 碎片化存储”来让攻击者根本不知道从哪下手。如果你也觉得传统加密太死板、彩虹表太猖狂、AES 太重、MD5 太老那不妨试试这个方案。十三、源码地址[GitHub 链接]你放上你自己的仓库地址就行十四、评论区如果你觉得这个方案有点意思欢迎在评论区留言讨论。如果你觉得这个方案很蠢也欢迎在评论区骂我。毕竟折腾才是程序员的浪漫。Peace. ✌️

相关新闻

Appshot:从截图到可运行应用的AI工具部署与实战指南

Appshot:从截图到可运行应用的AI工具部署与实战指南

这次我们来看一个能直接把截图变成可运行应用的项目——Appshot。它的核心思路很直接:你截一张现有软件的界面图,它就能分析截图中的UI元素和布局,然后生成一个功能相似、可以独立运行的桌面应用。这听起来有点像“逆向工程”的UI设计&#x…

2026/10/15 6:15:40 阅读更多 →
AI副驾驶如何重构SRE工作流:从告警风暴到智能根因分析

AI副驾驶如何重构SRE工作流:从告警风暴到智能根因分析

1. 从“救火队员”到“副驾驶”:SRE的日常困境与AI的破局点如果你是一名SRE(站点可靠性工程师),或者负责线上系统的稳定性,那么下面这个场景你一定不陌生:凌晨三点,手机铃声像警报一样把你从睡梦…

2026/10/8 3:34:39 阅读更多 →
React Native鸿蒙跨平台开发与图文混排实践

React Native鸿蒙跨平台开发与图文混排实践

1. 项目背景与核心需求在移动应用开发领域,跨平台技术方案一直是开发者关注的焦点。React Native作为Facebook推出的跨平台框架,凭借其"一次编写,多端运行"的特性,已经成为许多团队的首选方案。而鸿蒙系统(H…

2026/10/15 5:55:43 阅读更多 →

最新新闻

王道操作系统课后选填题刷题法:错题滚动+答案隔离+三轮复盘

王道操作系统课后选填题刷题法:错题滚动+答案隔离+三轮复盘

简介:这份王道操作系统课后题选填文档是一份针对考研操作系统复习的选择题与填空题专项资料。内容以王道教材课后题为蓝本,按知识点整理出数十道填空与选择,覆盖进程管理、处理机调度、死锁、内存与虚拟存储、文件系统、设备管理及磁盘调度等…

2026/10/15 6:18:43 阅读更多 →
context-mode上下文感知模式:让命令行工具在多变环境中稳定运行

context-mode上下文感知模式:让命令行工具在多变环境中稳定运行

做了这么多年命令行工具和自动化脚本,我最怕听到这样一句话:“你在你机器上跑得好好的,怎么到我这儿就崩了?”大多数时候不是代码逻辑有问题,而是脚本压根没有感知环境上下文的能力。后来我给自己常用的几个脚本工具加…

2026/10/15 6:18:43 阅读更多 →
基于Matlab Simulink的单相光伏储能系统建模与仿真

基于Matlab Simulink的单相光伏储能系统建模与仿真

1. 单相光伏储能系统架构设计1.1 系统整体拓扑与能量流先交代一下背景。这套模型面向的是典型家用或小型工商业场景:屋顶光伏给本地负荷供电,多余的电存到蓄电池里,蓄电池再不够的话才从电网取;反过来,光伏发得多、蓄电…

2026/10/15 6:18:43 阅读更多 →
固件升级避坑指南:设备识别、校验与恢复全流程

固件升级避坑指南:设备识别、校验与恢复全流程

简介:面向系统维护与硬件调试人员的 NOVATEK 升级指导 V1.0 文档,专门解决 NOVATEK 系统在 XP/WIN7 32 位环境下的固件升级问题,并注明可支持整机不拆机直接升级,适合需要维护老平台的运维人员。文档覆盖完整升级链路,…

2026/10/15 6:18:43 阅读更多 →
粤语会议记录总转错?实测6款支持粤语的录音转文字工具,附场景选型清单

粤语会议记录总转错?实测6款支持粤语的录音转文字工具,附场景选型清单

一、为什么"支持粤语"这四个字,成了选型最大的坑先说个真实感受。上个月帮朋友的传媒公司整理一段40分钟的粤语访谈,我前后换了三款工具,出来的文稿依然需要逐句核对。粤语有九声六调,同一个字不同声调代表完全不同的意…

2026/10/15 6:18:43 阅读更多 →
从碎片需求到系统设计:REA框架实战解析

从碎片需求到系统设计:REA框架实战解析

1. 从“rea”这个碎片标题聊起:一个容易被忽略的高频词我平时泡社区的时候,经常看到有人只甩一个词就问“怎么做”,最近遇到的项目标题只有三个字母:“rea”。说实话,第一眼确实懵。没有上下文、没有细节、没有任何配套…

2026/10/15 6:17:43 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →