一、对称加解密

  分类:流密码、分组密码

  流密码:把明文以比特划分单位,每一个比特与密钥做异或运算,得到密文。解密的时候用同一把密钥与密文做逐比特异或运算得到明文。

  分组密码:把原始明文分为等长的分组,一个分组一个分组的处理

  分组密码的目的,输出每一位比特是由输入明文的每一比特和密钥的每一比特决定的。也就是说每一比特的输入都影响到每一比特的输出。分组加密的原理用到古典密码的代换(把原始字母替换成其他字母或者符号)、置换(原始字母没有改变只是打乱了次序)、异或、一次一密等技术。之所以这样设计是用到了上个世纪两个实现加密信息非常典型的技术——混淆和扩散。混淆就是使输入位和输出位没有明显的统计关系;扩散就是移位操作,他原本在第1个比特我把他移到第5比特。

  现在详细说说代替(substitution),一组数据经过代替(S盒)的长度可能等长、可能压缩、可能扩展,如下图所示。当有较长的原始数据时就需要用户多个代替盒,多个代替模块之间没有关系。

 

   要向解决各个代替模块之间没有关联的问题就需要与置换(P)结合一下

 

   Feistel网络结构是为了解决一次一密的问题,密钥+其他数据+替换和换位使得每一次的密钥流都不一样。以下得到的密文不是最终密文,需要迭代做多次。

  看了以上这个图有一个问题,这个“其他数据”从何而来,其实就是子密钥。后面祥说子密钥的产生过程。

 二、DES原理

  以上内容都是DES算法的铺垫。DES加密用于保护政府机构和商业部门非机密的敏感数据,保护传输信道上的数据。

  DES的特点:1、属于分组密码。明文、密文、密钥(其中8个bit做奇偶校验)都是64bit;2、面向二进制的密码算法;3、加密和解密算法一样;4、属于feisitel结构;

  DES的算法框架。

     64bit的明文,经初始置换,分为左右各32bit,记为L和R,下标从1-16,进入feisitel结构。对于密钥这块,他经过子密钥扩展算法产生16个48bit的key,下标也1-16。经过16论运算得到R16、L16最后再经一个逆初始置换最终得到密文。

  总的来说DES算法分为两个模块,第一个模块密钥扩展生成16个子密钥;第二模块16论feisitel。

  密钥扩展:1、置换选择1,从64bit密钥去除8bit的奇偶校验,打乱重排,把剩下的56bit分为两个28bit,记为Ci、Di;

          2、分部对两个28bit进行循环移位;

         3、置换选择2,从56bit中筛选出48bit。至此第一轮的key1生成。

       以上过程一共重复16轮。

  子密钥产生示意图

   16论feisitel

   第一步、初始置换。根据初始置换表把64bit明文打乱,分为L0(32bit)、R0(32bit)。逆初始置换表则是还原回去。

              

 

 

                             初始置换表

    第二步、加密函数F。输入参数是Ri(32bit)和48bit(子密钥),输出结果再与Li做异或得到Li+1。

     F函数的具体操作是把32bit的Ri扩展置换成48bit,再与48bit的子密钥做异或,实现数据与密钥的混合。然后把得到48bit,再分为8组,每组做压缩置换。输出4×8=32bit,对32bit打乱。

  第三步、逆初始置换。