到底什么是:对称加密/非对称加密--公钥和密钥(下)
一.非对称加密:
与对称加密不同, 非对称加密使用了一对设计好的密匙:公钥(Public Key)和私钥(Private Key)来加密和解密。
二.公钥秘钥具体的效果:(前提:保证所有人都不会除法操作):
密码*公钥a=数字
数字*私钥b=P //P的末3位 = 原密码(其中公钥a和数字是有可能在传递过程中被泄密的)
1.那么设计密钥的人是怎么在公钥a和数字有可能被公开的情况下巧妙设计私钥b来解开密码的呢?
我们来通过上一篇文章:《到底什么是:对称加密/非对称加密--公钥和密钥(上)》中的一个例子来解释一下
在这个情况下,密码=118;公钥=27;
密码*公钥a=数字
数字*私钥b=P //其中P的末3位=密码118*27*2963=P=9440118
想要通过保证乘积P的末尾3位得到原密码118这样的3位数,我们注意到:原密码118总共经历了2次乘法,分别:118*公钥a*私钥b。那么两次累乘后,乘积P的后3位没有被影响还是118。
如果你已经理解了红色这段话所表达的意思,那么回到这道题目,我们可以发现:
公钥a(27)和私钥b(2963)的乘积恰好为80001----->( 80001=(80000+1) )
而(80000+1)✖️118势必可以保证结果的后三位再次找到原密码118。
不仅(80000+1)可以,(90000+1)也可以,(60000+1)也可以......
稍微研究一下也不难理解(8000+1)或(9000+1)作为公钥a和公钥b的乘积也可以;
那么公式来了:密码*(x*10^3+1)结果的后3位就是原密码
密码*(x*10^y+1)结果的后y位就是原密码
还有一个更重要的前提就是,小明和丽丽在实现需要约定好y的取值范围!!!
2.推广
公钥a和私钥b的乘积一定为80001如此之大的数字吗?a*b后三位的末尾一定要为1吗?
你可以尝试如下几个例子:
在密码为三位数118的情况下,a*b等于四位数(eg1001)能否成立呢?
a*b的后三位不是001,而是002,003呢?但当009的时候118还能在后三位预测吗?

