你怎么知道你的信没被别人打开过呢?
我们在开发中,一般都有客户端(用户所使用的版本)和服务端(服务器接受用户的请求并响应)。
假设客户端向服务端发送了一串非常重要的密码woshishabi,服务端接收这个密码,看起来没问题。但是如果我们在发送这个密码的途中,被运营商、黑客甚至是别国的情报机构给截取了呢?
假设我们把客户端称作A,服务端称作B,送信的称作C。A发信给B,怎么能确保C不知道里面的内容呢?
上一把锁
假设A有1把锁(a),将信件用a给锁上了,发给b,然后让b去解锁。
结果:B没有锁、打不开...
这个结论明显不是我们想要的。
把钥匙再给发过去?
假设B没有钥匙,A把信件上锁发给B。
然后再把钥匙发给B,让B自己解锁。
情况一:B拿到了钥匙和信件,看到了信件的内容。
情况二:C根本就没有把信件和钥匙给B,C将信件和钥匙藏了起来,然后自己打开了锁,看到了内容。
这个结论也不是我们想要的。
天才解法
假设A有一把锁a和钥匙a',B有一把锁b和钥匙b'。
A把信件的内容通过锁a给上锁,发给B。
B再把信件通过锁b给上锁,发给A。
A通过钥匙a'解了锁a,发给B。
此时信上只有锁b,B有钥匙,通过b'解了锁b。
这样就能保证C看不到里面的内容。
但是这个方法真的完全可靠吗?
不一定,让我们向最坏的角度想想:
C有一把锁c和钥匙c'
A把信件的内容通过锁a上锁,发给B。
C在途中根本就没有给B,而是把信件上了锁c,然后又发给A。
A用a'解了锁a,然后发给B。
C在发信途中用c'解了信件上仅剩的锁c。
这样C就看到了信件的内容。
也就是说,C完全可以充当B,完成B的操作,欺骗A。
你想想,目前还有什么方法可以阻止C看到A信件的内容?
王中王解法
下面的解法可能有点绕,注释以下:ABC代表人,abc代表锁,a'b'c'代表钥匙,P代表信件内容。
A有a,b',P
C有c,c'
B有b,a'
也就是说A只有B的钥匙,B只有A的钥匙。
正常情况
A用a给P加密,通过C给B。
B收到信件,上了锁b,又发给A。
A收到信件,用b'解了锁,只剩锁a,发给了B。
B收到信件,用a'解了锁,看到内容。
最坏角度 一
A用a给P加密,通过C给B。
C没有给B,把加密了的P自己上了把锁c,发给了A。
现在有两把锁,ac,A要去解b锁,却发现没有b锁,那么就可以断定是C出现了问题。
那么C就没了。
最坏角度 二
A用a给P加密,通过C给B。
B收到信件,上了锁b,现在有锁ab
C现在没法打开任意一个,所以C没了。
最坏角度 三
A用a给P加密,通过C给B。
途中C自己上了一把锁,给B
B发现已经有2把锁了,可以断定是C干的,
C有没了。
认真思考
所以这个题就被这样解出来了吗???