今年5月,《天才枪手》在泰国一上映,仅两周就斩获了1亿泰铢的票房,一跃成为电影界的一匹“黑马”。其中有个作弊情节是这样的:
枪手小琳利用手指不停地敲击考桌(实际上她是在敲曲子),在向其他小伙伴传递着答案,利用4首曲子分别代表答案ABCD,小伙伴们则以曲会意,最后都收获了满意的答案。我们可以简化下他们的作弊逻辑:
事前必须约定一套作弊(加密)规则:
即:A=曲1,B=曲2,C=曲3,D=曲4
这样,小伙伴只要能知道小琳发出的信号是曲几,他们就知道了对应的答案。即使小琳的信号被监考老师截取,如果监考老师不知道其中的规则,也只能一头雾水,毕竟无凭无据。
这就是简单的对称加密。什么是对称加密的科学定义?
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密——百度百科
小琳将自己的答案BADC利用规则加密为曲2曲1曲4曲3依次发送出去,而小伙伴们则根据同样的规则进行逆操作,就能将曲2曲1曲4曲3解密为BADC,这样就完成了
获取原文->密钥加密->密文传输->密钥解密->获取原文 整个信息传输的过程。
用伪代码简单表述逻辑如下(switch case函数类似于如果你有很多money,你就是富翁的表述):
小琳加密:
switch(原文){
case "A":
密文 = "曲1";break;
case "B":
密文 = "曲2";break;
case "C":
密文 = "曲3";break;
case "D":
密文 = "曲4";break;
default:密文 = "";
}
而小伙伴解密:
switch( 密文){
case "曲1":
原文= "A";break;
case "曲2":
原文= "B";break;
case "曲3":
原文= "C";break;
case "曲4":
原文= "D";break;
default: 原文 = "";
}
因此,我们可以简单的将对称加密理解为一对函数,加密就像y = F(x),有输入x就有输出y,而解密则相当于一个反函数x = G(y),有y输入就有输出x。至于函数具体怎么实现的,那就算法攻城狮与数学家们的事,我们大可不必操心。
要保证对称加密的安全传输,要基于两个基本点:
(1)双方约定的相同的加密规则
(2)不可让第三方知道加密规则
因此,对称机密的软肋也就显而易见,试想如果监考老师是个考场名捕,这点小把戏估计分分钟就被看穿了,不当场抓获,估计也会成为重点监控对象。
对称机密规则一但被破解,所有的信息将一目了然,信息传输宣告失败,当然,作弊也不例外,所以要想作弊不被抓,就得有更高级的加密方法,因此“非对称加密”就应运而生了。
下篇文章将详解非对称加密,一种比对称加密更加安全的加密方式,可以让你在网络世界中随意传输信息,却不担心信息被截取后而被破解,终究是何原因,请听下回分解。
-------------------------------------------------------------------
本文首发于币乎-我是攻城狮,一个不知名的java程序员!谢谢您对攻城狮的支持!
:)
-------------------------------------------------------------------