用一个数学上的小游戏作例子,老师让学生任意想一个三位数的数字A,然后把A*91的乘积的末尾三位数告诉老师,老师把末尾三位数*11得到一个乘积,乘积的末尾三位数就是数字A。
比如,数字A为234,234*91=21294,学生把294告诉老师,294*11=3234,末尾三位数就是数字A。
这个游戏的原理在于(不理解也没关系,不影响后面的学习):
91*11=1001,一个三位数*1001,相当于左移三位,然后再加上自己,因此一个三位数*1001的乘积的末尾三位数,一定等于该数
这个例子中,91就是公钥,谁都可以用公钥来加密,11是私钥,只有一个人有,所以只有一个人可以解密。
本例中,公钥私钥的创建,是利用了1001=91*11,其安全性在于,把1001拆成91和11很容易,但只凭91猜出1001和11很难。
我们还可以用更大的数字来做公钥私钥,比如400000001=19801*20201, 4000000000000000000000000000001=1199481995446957*3334772856269093,这样就更加安全。不过,真正的非对称加密算法(比如RSA)原理远比这复杂。
上面的例子,其实只是介绍了非对称加密的第一种应用场景:
消息发送方用公钥加密消息,接收方用私钥解密。
实际上,非对称加密还有第二种应用场景:
消息发送方用私钥加密消息,接收方用公钥解密,如果能解密成功,说明消息的来源可以信任。
备注
以上参考自知乎
网友评论