DES算法

  • DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。

    DES算法入口参数

  • DES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作密钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。

    算法步骤:

  • DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是56位,其算法主要分为两步:

    1. 初始置换
      其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:设置换前的输入值为D1D2D3……D64,则经过初始置换后的结果为:L0=D58D50……D8;R0=D57D49……D7。

      其置换规则见下表:
      58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,
      62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,
      57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,
      61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,
2. **逆置换**
    经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。
    此算法是对称加密算法体系中的代表,在计算机网络系统中广泛使用.

IDEA算法

原理:

  • IDEA 它也是对64bit大小的数据块加密的分组加密算法密钥长度为128位它基于”相异代数群上的混合运算”设计思想。

  • 产生密钥:

    1. 算法用了52个子密钥(8轮中的每一轮需要6个,其他4个用与输出变换)。
  1. 将128-位密钥分成8个16-位子密钥。这些是算法的第一批8个子密钥(第一轮六个,第二轮的头两个)。然后,密钥向左环移25位后再分成8个子密钥。开始4个用在第二轮,后面4个用在第三轮。密钥再次向左环移25位产生另外8个子密钥,如此进行直到算法结束。具体是:
    IDEA总共进行8轮迭代操作,每轮需要6个子密钥,另外还需要4个额外子密钥,所以总共需要52个子密钥,这个52个子密钥都是从128位密钥中扩展出来的。
  • 加密过程:

    1. 输入的64-位数据分组被分成4个16-位子分组:xl,X2,x3和x4。
    2. 这4个子分组成为算法的第一轮的输入,总共有8轮。在每一轮中,这4个子分组相互相异或,相加,相乘,且与6个16-位子密钥相异或,相加,相乘。

在每一轮中,执行的顺序如下: 

 (1)X1和第一个子密钥相乘。
  (2)x2和第二个子密钥相加。
  (3)X3和第三个子密钥相加。
  (4)x4和第四个子密钥相乘。
  (5)将第(1)步和第(3)步的结果相异或。 .
  (6)将第(2)步和第(4)步的结果相异或。
  (7)将第(5)步的结果与第五个子密钥相乘。
  (8)将第(6)步和第(7)步的结果相加。
  (9)将第(8)步的结果与第六个子密钥相乘。
  (10)将第(7)步和第(9)步的结果相加。
  (11)将第(1)步和第(9)步的结果相异或。
  (12)将第(3)步和第(9)步的结果相异或。
  (13)将第(2)步和第(10)步的结果相异或。
  (14)将第(4)步和第(10)步的结果相异或。
  每一轮的输出是第(11)、(12)、(13)和(14) 步的结果形成的4个子分组。
将中间两个分组分组交换(最后一轮除外)后,即为下一轮的输入。
  经过8轮运算之后,有一个最终的输出变换:
  (1) X1和第一个子密钥相乘。
  (2) x2和第二个子密钥相加。
  (3) x3和第三个子密钥相加。
  (4) x4和第四个子密钥相乘。
  • IDEA算法的密钥长度为128位。设计者尽最大努力使该算法不受差分密码分析的影响。

    MD5加密算法

  • MD5加密是一种不可逆的加密算法。

    Md5加密算法原理

  • MD5加密算法以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

  • 在MD5加密算法中,首先需要对信息进行填充,使其字节长度对512求余数的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N512+448,即N64+56个字节(Bytes),N为一个正整数。

  • 填充的方法如下:在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后再在这个结果后面附加一个以64位二进制表示的填充前的信息长度。经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍数。这样做的原因是为满足后面处理中对信息长度的要求。

  • MD5中有四个32位被称作链接变量(Chaining Variable)的整数参数,他们分别为:

A=0x01234567	

B=0x89abcdef

C=0xfedcba98

D=0x76543210
  • 当设置好这四个链接变量后,就开始进入算法的四轮循环运算,循环的次数是信息中512位信息分组的数目。

  • 将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。 主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量(文本中的一个子分组和一个常数)。

  • 再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。 以一下是每次操作中用到的四个非线性函数(每轮一个)。

    F(X,Y,Z)=(X∧Y)∨(( X)∧Z)
    G(X,Y,Z)=(X∧Z)∨(Y∧( Z))
    H(X,Y,Z)=X?Y?Z
    I(X,Y,Z)=Y?(X∨( Z))
    其中,?是异或,∧是与,∨是或, 是反符号。
  • 如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。F是一个逐位运算的函数。即,如果X,那么Y,否则Z。函数H是逐位奇偶操作符。所有这些完成之后,将A,B,C,D分别加上a,b,c,d。然后用下一分组数据继续运行算法,最后的输出是A,B,C和D的级联。最后得到的A,B,C,D就是输出结果,A是低位,D为高位,DCBA组成128位输出结果。

Md5加密算法的应用

  • MD5加密算法由于其具有较好的安全性,加之商业也可以免费使用该算法,因此该加密算法被广泛使用,md5加密算法主要运用在数字签名、文件完整性验证以及口令加密等方面。

往期精彩文章