本篇博文会从一个对话中解释加密和解密的原理
首先看一下加密的过程和解密过程(图片摘自《深入java虚拟机》)
加密过程:
解密过程:
假如A授权B的一段代码dmk可以访问A的系统,一个坏蛋C也想要访问A的系统做一些坏事,但是C没有的到A的授权,那么A怎么知道dmk就是dmk呢,是这样做的B通过dmk生成一个散列值,然后将这个散列值追加到代码尾部传送给A,A拿到这个信息后将代码和散列分开,然后A用和B相同的算法也计算出散列值,用计算出的散列值和B传过来的散列值比较如果相等就证明这段代码是dmk。现在坏蛋要和B斗志斗勇了!!!
好戏开始:
坏蛋:我只需要让我的代码生成的散列值和B的代码生成的散列值相等就可以了,这样我的代码就可以进入A的系统为所欲为了,不过这样做好像不可能,因为B的散列值是128位的,我的代码的散列值肯定和B不一样,不过我可以在我的代码中找一个位置添加随机的数据直到生成的散列值和B一样,恩,这样做的话从概率的角度来讲我大概需要尝试 2的128次方 这么多次,额这个办法还是不要想了,太蠢了
啊哈,我想到办法了,我把B的代码和散列一起换掉,这样让A拿到我的代码生成散列和我给它的散列对比不就行了,哈哈,我太聪明了
B:哼,我早就想到了有人会把我的代码和散列一起替换掉,我会把我生成的散列用我的私钥加密的,然后我会把我的公钥放到我的网站上,这样A拿到我的代码后去我的网站上拿到我的公钥将散列解密然后和代码生成的散列做比较就可以了,只要你拿不到我的私钥即使你将代码和散列一起替换掉也没用,A拿到你这个坏蛋的散列再用我放到网站上的公钥解密出来的散列肯定和你这个坏蛋的代码计算出来的散列匹配不上,这样你的技能就不能得逞了
坏蛋:这次我肯定不会用试这种蠢办法了,让我想想,有了,我可以在A来你网站拿公钥的途中用我的公钥替换你的公钥,然后用我的公钥/私钥对来替换掉你的,这样我就变成你了,哈哈,我实在是太聪明了
B:啊,太可怕了,他要让我从这个世界上消息,他居然要变成我,我一定得保护住我的公钥,对,我一定要找个强大的后盾来帮我保住我的公钥,该找谁呢
证书机构:来我这里吧B,我可以把你的公钥用我们证书机构的公钥进行签名,你最终将得到一个被称为证书的数字序列。这样A去你的网站拿到证书用我的公钥进行解密然后得到你的公钥,放心吧我的公钥是不会被替换的,相信我的实力
坏蛋:我还会回来的
本文通过一个生动的故事场景,讲解了加密和解密的基本原理。包括散列值比对验证、公钥加密私钥解密机制及证书机构的作用。
1万+

被折叠的 条评论
为什么被折叠?



