精英盒子 -> 程序设计 -> 加密系列1:加密算法概述 [打印本页]

jybox 2012-05-19 03:55

加密系列1:加密算法概述

加密算法概述

加密这其实是个很宽的领域,其实我起个加密算法概述这个题目实在有点太大了.

这篇,或者说这个系列的文章只谈加密算法的某几个方面,也是我所了解的几个方面, 我力争做到每个有初中数学基础的人都能看懂我的文章,无论他是否接触过编程,甚至是否接触过电脑.


无论战争有多么可恨,我们都不得不承认战争一直在促进社会的发展.
最初的密码学(加密算法是密码学的一个主要分支)就是用来在战争中传递机密消息的.想必大家都在书籍、电影、电视剧中看到过这方面的信息.

经典密码学

在计算机出现之前的密码学,我们叫经典密码学.
最显著的特征就是加密很简单,计算量很小——毕竟当时没有计算机,一切都只能手算.
这时的加密,其实都是在拼智商,没有太多的数学依据.

经典密码学,比较常见的手段有 打乱字符顺序替换字符 .

例子:打乱字符顺序

假设我们要加密的内容是:

中华人民共和国是工人阶级领导的、以工农联盟为基础的人民民主专政的社会主义国家。

例如,我们可以将这段要加密的话(称作明文)去掉标点,排列成6列:

中华人民共和
国是工人阶级
领导的以工农
联盟为基础的
人民民主专政
的社会主义国
家

然后按照竖着的方向,将6列文字拼起来,得到加密后的文字(称作密文):

中国领联人的家华是导盟民社人工的为民会民人以基主主共阶工础专义和级农的政国

但是呢...恐怕看到密文的人还是能猜出个大概(其实如果是一篇1000字的文章这么加密一遍,你就猜不出来了).
——这也是经典密码学的弱点,没有数学上的保障,纯粹是双方拼智商.

至于解密方法,不用我多说了吧?


我们梳理一下术语:


  • 明文:要加密的数据(在这里是一段文字).
  • 密文:经过加密后的数据.
  • 加密算法:这里就是“把明文排作若干列,竖着将这若干列的文字拼起来”.
  • 密码(密钥):在这里就是6.

例子:替换字符

例如,我们要加密的明文是(不算中文翻译...):

China is a socialist country.(中国是一个社会主义国家)

我们可以在忽略大小写、忽略标点的情况下,把每个字母用字母表的下一个字母替换:

dijob jt b tpdjbmjtu dpvousz

哈哈,看不出来了吧.
但这只是表象.破解它的手段有很多,例如统计英语中每个字母的出现频率,然后和密文中各个字母的出现频率做对比,就可以大致得知密文中的每个字母对应明文中的哪个字母.

PS.你难道猜不出来,上面单独的那个b ,不是a就是I么...单个字母的单词就这么两个.


在这里:


  • 加密算法:这里就是“把每个字母用字母表的下n个字母替换”.
  • 密码(密钥):在这里n就是1.

经典密码学中还有一些比上述两种算法更高级的算法,这里不再举例了.

现代密码学

自从二战后期,出现了计算机,由于计算机提供的强大的计算能力, 密码学由之前的拼智商逐渐发展成了有严谨的数学基础的学科,其实现在的密码学都是数学大牛们在搞.

其实这个系列的文章主要关注的是现代密码学,下面是这个系列的目录:

  • 散列算法
  • 对称加密算法
  • 非对称加密算法
  • 数字签名
  • 总结

每篇文章都会结合小例子来讲,同时还会介绍常见的一些技术如何应用这些加密算法.



jybox 2012-05-19 04:03
排版真心坑爹啊....

cu2s 2012-05-21 20:40
enen不错~~




Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.043934 second(s),query:5 Gzip enabled