前言
无论你有没有意识到,日常生活中我们几乎每天都在跟密码学打交道。只要你接触过互联网,那么基本上离不开密码学。举个最简单的例子,现在的很多网站都是通过HTTPS协议进行通信的,而支撑着HTTPS协议正常运行的正是密码学这一理论基础。作为程序员,我们更是有必要了解下密码学的一些基本理论及其背后的原理。本文将通过通俗易懂的语言为大家介绍下密码学的概念,希望大家看完能够对密码学有初步的认识。
一、加密
在介绍加密之前,我们先引入一个场景。假设有2个人小明和小白,他们俩通过电子邮件进行沟通。由计算机网络的知识我们可以知道,小明发给小白的邮件会被拆分成多个数据报文在网络中进行传输,假如说有个窃听者小黑截获了小明发给小白的数据报文,并将截获的数据报文按顺序组装起来,然后按照标准邮件传输协议进行解析,则小黑就可以获得小明发送给小白的邮件内容了,因此在这个发邮件的过程中就存在被第三者窃听的风险。为了解决这个问题,我们需要对信息进行加密以防止数据被窃听。接下来介绍今天要讲的第一个内容:加密。
在上述例子中,之所以存在数据被窃听的风险,是因为在通信的过程中邮件内容是通过明文进行传输的。明文就是未加密处理的消息内容,在上述例子中就是邮件内容。假如说小明跟小白在邮件通信的过程中采用了只有双方看得懂的文字,那么即使这些文字被第三者截获了,那么第三者也看不懂其中的含义,这样就可以防止窃听了。而这个过程就是加密,即将明文转换成密文的过程,密文对于第三者而言就是没有任何意义的数据,只有通信双方才有办法将密文转换成明文,进而获取邮件里传输的原始可读内容。而将密文转换成明文的过程就是解密。
既然要进行加密跟解密就必须用到密钥。密钥与数据的关系可以理解成保险柜钥匙跟保险柜的关系,只有正确