负数除以正数余数如何求_如何给产品经理解释什么是 RSA 加密(二)

af376815014e55b7260dabf090e753c8.png

摄影:产品经理 普普通通的伊比利亚猪排

在如何给产品经理解释什么是 RSA 加密(一)一文中,我们使用传递加锁铁盒子的方法来传递信息:

产品经理在铁盒子上面挂上一把锁,把铁盒子通过其他人转交给接收人。接收人再挂一把锁到铁盒子上,把盒子通过其他人转交给产品经理。产品经理解开自己的锁,把铁盒子再给接收人,最后接收人解开自己的锁。

整个过程不需要涉及到钥匙的交换,也防止了铁盒子在传递的过程中被中间人打开。

然后我们使用乘法复现了这个过程。但使用乘法有一个致命的弱点:对于,已经知道b 和 c 了,自然就能求出。现在需要寻找一种数学计算方法,既满足交换率,同时它又不能反向计算。

显然加减乘除都不满足,因为他们可以反向计算。那么有什么运算不能反向计算呢?

不要忘记,我们的目标是让产品经理都能看懂,那么我们考虑一下小学、初中学过的数学运算中,哪一种运算不能反向计算呢?

答案就是求余数。

例如我们计算,100除以11,商为9,余数为1。现在我们知道了除数是11,余数是1,无法反向推断出被除数100.因为不知道商是多少。除以11能得到余数1的数有无数多个:1, 12, 23, 34, 45, ……

如果你觉得100除以11还太简单了,那么我们再看看余数为562求 。

现在,我们把这个被除数100改成一个指数幂的形式。其中,可以公开,需要保密。

我们构造一个计算公式:

其中,和都可以公开。产品经理与接收方都使用这两个数字。和的选择只有一个要求,必须比 小。仅此而已。而产品经理与接收方使用不同的,并且不需要交换,不需要告诉对方。

现在,我们假设,,随便选一个大数就可以了,例如产品经理的,接收方的,对于产品经理,余数为10:

对于接收方,余数为5:

这两个余数也可以公开传递,产品经理拿到接收人的余数5,接收人拿到产品经理的余数10.

现在,我们来看一个非常神奇的公式:

其中,是对方的余数。

先看产品经理这边,她拿到了接收方的余数5,于是做计算,得到余数25:

接收方使用产品经理原来的余数10进行计算:

你会惊讶地发现,两边计算出来的余数都是25.你可以多选几个不同的数据进行演算,你会发现最终两边总是可以得到相同的余数。

于是这个25——这个相同的余数就可以当做密码来做数据加密——产品经理用她最终计算出来的密码25对信息进行加密。接收方使用他最终计算出来密码25对密文进行解密。

在这个过程中,产品经理和接收方发送了几条所有人都可以看的公开信息,但却实现了密码交换。并且,这使用到的最难的数学知识,仅仅是初一(甚至有些人小学就学过,比如我)幂运算。

但是这种方式有一个缺点,就是一开始交换密码的过程,产品经理和接收人都必须在线,产品经理先把、以及自己计算的余数发送给接收方,接收方使用、计算自己的余数发给产品经理,接下来产品经理才能计算出真正的密码。如果接收方第一次返回信息给产品经理中间隔了比较长的时间,那么产品经理也要等很久才能进一步发送真正的消息。

在下一篇文章中,我们来解决这个问题。

ec7e0c2eb536f84e8c66ed5087873575.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值