关于中文做哈希算法的思考

本文探讨了哈希算法的特性,尤其是MD5的不可逆性,以及试图构想将哈希应用于中文加密的场景。虽然理论上可以设计一种中文哈希加密方式,将汉字转化为笔画的哈希值,但这种方法存在明显的安全性问题,如哈希碰撞和易被伪造。作者指出,这种加密方式并不适用于密码保护,因为攻击者可以轻易构造相同哈希值的字符串。最后,作者意识到这种思路实际上类似于非对称加密的基本概念。
摘要由CSDN通过智能技术生成

今天在看哈希算法的时候,有点疑惑为啥MD5的输入每个相同的输入都能对应相同的输出,那为啥不能根据映射表来反推出原文,后面看到一句话 “哈希是用无限的输入对应有限的哈希结果集”,豁然开朗,也就是根本没有映射表,MD5的哈希算法就是只能一头进另一头出,不可逆,也就是无限的输入,一定能找到一个哈希值,但是这个固定的哈希值,可能还是对应无限的输入,所以不能进行反推,由此想到中文的哈希加密方式的一种可能。

就是我们能不能设计一种算法,直接对中文进行哈希比如,

1、“我今天去上学”对应的哈希值 : x横y竖z撇n捺m点q折p勾.......(x,y,z,n,m,q,,pint值)

2、“一二一”  对应的哈希值为: 4横0竖0撇0捺0点0折0勾....

3、“一 一 一 一”  对应的哈希值为:4横0竖0撇0捺0点0折0勾...

4、“二 二” 对应的哈希值为:4横0竖0撇0捺0点0折0勾...

也就是说,任何的中文,甚至几百亿个字的中文,都能对应一个且唯一 一个哈希值,但是不能从哈希值倒推出原文。比如 100横100竖100撇100捺100点100折100勾... 你能猜出它是由哪些中文组成的?结果应该趋于无限。

 

优点:

1、输入是无限的,而输出也是无限的,如果设置长密码,被反推破解密码的可能性几乎为0

缺点:

1、输出是无限的是因为对整个输入进行了解析,比如输入几百亿个中文,然后还有先每个汉字进行笔画的分类统计,才能得出哈希值,可能会导致处理时间较长(不过MD5估计也会对所有的字符进行遍历统计)

2、汉字越少,哈希碰撞概率会急剧升高,比如上面的示例2、3、4,得出的就是同一个哈希值,而且字数越少越容易被暴力破解,比如哈希值:“1横0竖0撇0捺0点0折0勾...”我们能猜出它应该就是“一”。

 

 

写到一半才想起来,这个哈希加密的方式愚蠢至极,虽然说这也是一直单向求解的加密方式,你几乎不能从哈希值得出我的原文,但是,这他妈完全不能作为密码加密来进行使用,因为这个哈希结果太明显了,容易被伪造,比如我知道你的哈希值是

100横0竖0撇0捺0点0折0勾...我不知道原文是一二三。。。(省略)。。  还是      二一三一。。。。。但是我完全可以直接输入100百个一,得出这个哈希值,然后和数据库的一对比,直接破解,太蠢了!至于其他更复杂的哈希值,也可以通过求余的方式进行填充构造哈希值。

根本就是像 “睡眠算法” 一样扯。

 

无限对应有限其实就是非对称加密。。。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值