加密:你怎么知道你的信没被别人打开过呢?-Python板块造梦空间论坛-技术交流-造梦空间论坛

加密:你怎么知道你的信没被别人打开过呢?

你怎么知道你的信没被别人打开过呢?

我们在开发中,一般都有客户端(用户所使用的版本)和服务端(服务器接受用户的请求并响应)。

假设客户端向服务端发送了一串非常重要的密码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有没了。

 

认真思考

所以这个题就被这样解出来了吗???

请登录后发表评论

    • Kysou的头像-造梦空间论坛Kysou徽章-创作大使-造梦空间论坛等级-LV1-造梦空间论坛作者0
© 造梦空间论坛