Des

2018-10-19  本文已影响17人  悟剑声
  1. 常用加密算法的Java实现总结

对称加密算法DES、3DES和AES

  1. 算法原理

    DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其算法主要分为两步:
    (a) 初始置换
    其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位。
    L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位。
    其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,最后一位是原来的第7位。
    例:设置换前的输入值为D1D2D3……D64,则经过初始置换后的结果为:L0=D58D50……D8;R0=D57D49……D7。
    (b) 逆置换
    经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。

  2. 常用的填充方式

在Java进行DES、3DES和AES三种对称加密算法时,常采用的是NoPadding(不填充)、Zeros填充(0填充)、PKCS5Padding填充。
(a) ZerosPadding
全部填充为0的字节,结果如下:
F1 F2 F3 F4 F5 F6 F7 F8 //第一块
F9 00 00 00 00 00 00 00 //第二块

(b) PKCS5Padding
每个填充的字节都记录了填充的总字节数,结果如下:

F1 F2 F3 F4 F5 F6 F7 F8 //第一块
F9 07 07 07 07 07 07 07 //第二块

(c) PKCS7Padding


PKCS #7 填充字符串由一个字节序列组成,每个字节填充该填充字节序列的长度。假定块长度为 8,数据长度为 9,
数据:
FF FF FF FF FF FF FF FF
FF
PKCS7 填充:
FF FF FF FF FF FF FF FF
FF 07 07 07 07 07 07 07

如果要填充8个字节,那么填充的字节的值就是0×8;要填充7个字节,那么填入的值就是0×7;以此类推
01
02 02
03 03 03
04 04 04 04
05 05 05 05 05
etc.
假设block为8个字节,明文为64各字节,那么需要额外补8个0x08.
这样的好处是,根据最后一个byte的填充值即可知道填充字节数。

  1. DES共有四种工作模式

其他

疑问?

链接

上一篇 下一篇

猜你喜欢

热点阅读