你真的了解编程加密的原理吗?

加密算法是编程语言中非常常见的一个应用,比如用户在进行密码设置的时候,绝大多数情况加,程序员都会采用加密的形式进行密码存储(为什么说是绝大多数呢,facebook曾曝出明文密码存储的问题),那加密到底是怎么回事呢?

先列举出生活中的一些加密的例子,最常见的加密其实就是语言加密,什么叫做语言加密呢?

通俗的解释就是我们平时所说的话,比如英语、我们国家各地区的方言,我们都可以把它们理解成是一种加密。当我们在学习这门语言的时候,也就是解密的过程,当我们完全掌握了这门语言,也就掌握了它的破解方式。

比如我们在学习英语,那么其实就是要掌握各种解密的方式。这种理解方式相信大家都能够明白。

发送信息之前加密,接收到信息首先解密

在代码中我们也同样是使用某一种规则来进行加密,比如常见的md5等。

下面我们使用凯撒密码来进行一段话的加密演示。

加密的步骤都是首先需要制定一个加密规则,下面则是我们制定的加密规则

左侧为原始字符,右侧为加密后的字符

这里我们采用每一个字母都向后移动13个字母的形式来进行加密或者是解密。其中还有一个细节,字母A加密为字母N,字母N同样能够加密成字母A。也就是说加密和解密两个方向上是完全相同的,也就是说我们可以采用相同的秘钥值来进行加密和解密,这个秘钥值就是13。为什么说是13呢?英文一共包含26个字母,这个13就意味着我们要将每一个字母都向后挪13个,当挪到结尾的时候再从头开始,可以理解成形成一个圈。

我们先来尝试一下手动加密和解密一个单词,当然这个过程反向也是成立的。

HELLO(加密)->URYYB(解密)->HELLO

这里还有一个小的知识点需要进行讲解,上述的加密表中,我们所采用的都是大写字母对应的形式,那么在Python中,我们要如何能够将所有的字母全部转换成大写呢?这个方法很简单,他的名字就是upper

我们可以这样来使用它: "hello".upper() 这样返回的结果就变成了HELLO,它会把所有的小写字母都变成大写,我们也可以采用将小写字母对应的十进制值减去26来进行小写变大写的转换。这个转换方法其实就是通过ASCII码表来进行。

除此之外,还有一个细节,就是上面我们提到过的秘钥值是13,为什么说是13呢?因为键盘上的每一个符号都对应着一个数字,这个对照表就叫做ASCII表,下图就是一张ASCII码表

图片为互联网搜索结果

图中用红色框圈住的部分就是大写英文字母对应的十进制的数字。在Python中,我们可以使用ord函数和chr函数分别进行字母和十进制数字之间的转换,这样做的目的就是能够让这些字母像数字一样进行加减法的运算。我们定义的加密算法中,两个字母之间对应十进制数字相减就是13,所以这个秘钥值就是13

ord函数是将字母转换为数字,例如:ord("A"),结果是65chr函数是将数字转换为字母,例如:chr(65),结果是A

这些都明白了之后,我们就可以进一步的写一下我们的加密小程序了。

首先我们需要有一段消息,这段消息可以是自定义的,也可以是用户输入的,这里我们将展示一下用户输入的方式。

完整的代码展示

运行代码后,让我们输入一段话,这里我输入: I will always love you !!!!!

绿色字体为我输入的字体,加密后的结果已经被打印。

大家可以尝试一下自己的加密小程序试试哦!

你可能感兴趣的:(你真的了解编程加密的原理吗?)