剧情介绍
密码学可能是一个难以理解的主题。它充满了数学证明。除非你真的需要开发密码系统,否则,如果你只想从宏观的角度了解密码学,你并不需要理解这些复杂的内容。
如果你抱着能够创建下一个 https 协议的期望打开这篇文章,我不得不遗憾地表示只有信鸽是不够的。否则,煮一些咖啡,享受这篇文章吧。
alice,bob 和信鸽?
你在互联网上的任何活动(阅读这篇文章,在亚马逊上买东西,上传猫咪的图片)都归结为向服务器发送消息和从服务器接收消息。
这么讲听起来可
能有点抽象,因此,我们不妨假设这些信息是通过信鸽传递的。我明白这么假设显得很随意,但请相信我:https 的工作原理就是这样的,只是快得多。
本文中我们并不会使用,服务器,客户端和黑客这样的术语,取而代之的是,我们会依次使用人名 alice、 bob 和 mallory来代替它们。如果你不是第一次尝试理解密码概念,你可以认出这些名字,因为它们被广泛用于技术文献中。
一次简单的通讯
如果 alice 想要给 bob 传递一条信息,她将信息绑在信鸽的腿上,然后让信鸽传给 bob。bob 收到信息,读取信息。一切都正常。
但要是 mallory 途中拦截了 alice 的信鸽,并且改变了信息的内容?bob 无法知道 alice 发送的信息在传递途中被修改了。
这就是 http 的工作原理。挺可怕的,对吧?我不会通过 http 协议来发送我的银行凭证,你也不应该这么做。
一个密令
那如果 alice 和 bob 都很机灵呢。他们同意将使用密令来写信息。他们将字母表中的每个字母偏移 3 个位置。比如:d -> a, e -> b, f -> c。明文“secret message”将转换成“pbzobq jbppxdb”。
现在,如果 mallory 拦截了信鸽,她既不能把信息改变成一些有意义的信息,也不能明白信息里说的内容,因为她不知道密令。但是bob可以简单地反向应用密令(a -> d, b -> e, c -> f)将信息解密。密文“pbzobq jbppxdb”将被解密回“secret message”。
大功告成!
这被称为对称密钥密码术,因为当你知道如何加密一条信息,你也知道如何给信息解密。
我在上面介绍的密令通常被称为凯撒密码。在现实生活中,我们使用更高级和复杂的密令,但是主要思路是相同的。
openssl的对称加密
openssl 中集合了大部分的加解密算法,用 openssl 来模拟对称加密的过程,假设alice 写的一封信件放在 plain.txt 中
root@ubuntu:~/openssl_ca/enc# cat plain.txt hello
使用 openssl的 des 对 plain.txt 进行加密,
openssl enc -e -des -in plain.txt -out encrypt.txt -pass pass:12345678
使用密码 12345678 进行加密,输出到文件 encrypt.txt 中。
查看 encrypt.txt 中的内容:
root@ubuntu:~/openssl_ca/enc# cat encrypt.txt salted__ dd?b@麹
加密后的文件不是原来的内容了。
当收信人bob 接到这封信的使用同样的使用密码 12345678 对加密的文件也就是他手里拿到的信,进行解密,
openssl enc -d -des -in encrypt.txt -out plain.encrypt.txt -pass pass:12345678
解密后的文件放在 plain.encrypt.txt 中,查看 plain.encrypt.txt 的内容:
root@ubuntu:~/openssl_ca/enc# cat plain.encrypt.txt hello
因为mallory 即使截获信鸽并不知道我们使用密码是 12345678 ,使用的加密算法是 -des ,因此解不开这封信,比如使用 密码 122对加密的文件进行解密,他无法得到原来的内容。
root@ubuntu:~/openssl_ca/enc# openssl enc -d -des -in encrypt.txt -out plain.encrypt.txt -pass pass:122bad decrypt140173114889880:error:06065064:digital envelope routines:evp_decryptfinal_ex:bad decrypt:evp_enc.c:529:
提示解密失败。
这是一次完整的对称加密过程。所谓的对称加密,可以这样来理解,写信人alice 和收信人bob ,知道大家使用的加密方式和加密的密码。
转载请标明来之:大家来编程-go2coding 更多教程:大家来编程-go2coding