故事是这样的:
你有一封信,里面写着你对你对象的爱,但是,邮递员叔叔想要拆散你们,所以他打开你的信,把所有的爱,改成了讨厌。你跟你对象因此拜拜了。
如何防止别人改你的文件?如果别人改了你的文件,你也应该能知道,不是吗?不要读了被人故意造假的信息,还觉得自己看到了天大的真实。了解了这个加密方法,你会觉得所有偶像剧里的相关桥段都是因为男女猪脚不好好学习。
其中一个方法是:用你文件里的内容生成一个唯一的密码,只要文件内容变,密码必须变。这样,如果文件内容被别人改了,你也是知道的。也就是说,文件和密码一一对应。
写到这里已经有点抽象了,理解抽象的方法之一是举个例子。所以我们举个例子。如果我在信里写:「你好吗」,然后用一种方法产生一串密码:7c62edd327b79f9b44c5142675e39d0b
。如果这封信被别人改成了「你好讨厌」,密码会变成59d320240beecf93759f02cb39f88f30
。也就是说,一封信对应一个密码,如果信的内容和密码对不上,那说明信被掉包了。
那怎么应用呢?
如果我要写这封信,我可以用这封信的内容生成一个密码,通过一个比较善良的邮递员送给XX收信人。收信人「虽然不能从密码中读出任何信息」,但是可以留着。然后我选择另外一个邮递员,把真正的信送给收信人。当收信人把密码和信都收到之后,用「同样的方法」,算一下这封信的密码应该是多少,如果和密码一样,就说明信是真的。否则,信就是假的。
但是,这里面有几个疑问,用什么样的方法,可以让内容生成唯一的密码呢?而且,收信人用通用的方法也要能够生成同样的密码。这就涉及到算法,要保证密码的唯一性。我上面把「你好吗」和「你好讨厌」转换成密码的算法是一种叫做MD5的方法。
还有一个疑问,我在上面说,收信人不能从密码中读出任何信息。因为很多人都能看到这串密码,比如那个邮递员,但是不能让他们读出里面的信息。而且,即使收信人和我用同样生成密码的方法,他也不能给密码解密。也就是说MD5是一种非对称加密:能加密,却不能解密。
扰乱偷信人的视听
刚刚提到的MD5加密方法,其实是公开的,谁都可以用。所以,刚才我们的送信流程设计,并不是天衣无缝的。如果两个邮递员想合伙给这封信掉包,他们就可以写个「你真的好讨厌」,然后用MD5算出一个密码,分别送给收信人。收信人核对了信的内容和密码,断定你真的写了「你真的好讨厌」,怎么办?
为了解决这个问题,我们可以想办法扰乱偷信人的视听。刚刚我们提到,MD5加密过的内容是没法解密的,所以,拿到密码的人还不能拿到完全的信息。这就给了我们一个机会,在生成密码的时候,加入一些骗过敌人眼睛的东西。比如,我把「你好吗」这封信变成,「AAA你好吗AAA」,用MD5加密一下,就变成了779352b764d30ababd0e22b8bcd03b2c
,跟「你好吗」加密后的结果是不同的。而敌人是不知道你加个AAA这个奇怪的东西到信里的。
收信人还是收到「你好吗」这封信,然后自己加上AAA到信里,算一下MD5对应的密码,如果正确,密码相同,怎说明信是对的。如果邮递员把你好吗,改成了你真的好讨厌,而送去的密码,是直接用「你真的好讨厌」加密过的,没有加AAA,你们也是对不上的。
其实,这种方法就叫做加盐。留意身边和很多工具,比如图片上传都有采用这种加盐的方法,来保证文件就是正确的文件。
后话
虽说MD5是非对称加密,但是真的没办法被破解么。理论上也是有办法的,如果有人记下了MD5中所有可能的密码,就能对应出,原始的字符内容是什么了。
网友评论