DES加密算法
对称加密算法1)定义
在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
2)优缺点
优点:算法公开、计算量小、加密速度快、加密效率高。
缺点:
(1)交易双方都使用同样钥匙,安全性得不到保证。
(2)每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量呈几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。
3)常用对称加密算法
基于“对称密钥”的加密算法主要有DES、3DES(TripleDES)、AES、RC2、RC4、RC5和Blowfish等。
DES算法
1)DES 算法介绍
DES算法全称为Data Encryption Standard,即数据加密算法,它是IBM公司于1975年研究成功并公开发表的。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
2)算法原理
DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其算法主要分为两步:
(1)初始置换
其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:设置换前的输入值为D1D2D3……D64,则经过初始置换后的结果为:L0=D58D50……D8;R0=D57D49……D7。
(2)逆置换
经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。
分组模式
1)为什么需要分组模式?
明文的长度不固定,而分组密码只能处理特定长度的一块数据,这就需要对分组密码的算法进行迭代,以便将一段很长的明文全部加密,而迭代的方法就是分组的模式。
常见的分组模式:
EBC模式:Electronic Code Book, 电子密码本模式
特点: 简单, 效率高, 密文有规律, 容易被破解
CBC模式:Cipher Block Chaining, 密码块链模式(推荐使用)
特点: 密文没有规律, 经常使用的加密方式
CFB模式:Cipher FeedBack, 密文反馈模式
特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
OFB模式:Output-Feedback, 输出反馈模式
特点: 密文没有规律, 明文分组是和一个数据流进的按位异或操作, 最终生成了密文
CTR模式:CounTeR, 计数器模式(重点,推荐使用)
特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
常用的填充模式
Java进行DES、3DES和AES三种对称加密算法时,常采用的是NoPadding(不填充)、Zeros填充(0填充)、PKCS5Padding填充。
Eclipse中分析DES算法代码
1)在主类中分析DES加密的地方
在主类Mainactivity里面调用了四种自定义的数据加密算法:
DESCBC、DESedeCBC、DES、DESede
2)分别分析DESCBC、DESedeCBC、DES、DESede类
getInstance,通过该方法获取相应的算法
generateSecret:讲加密密钥生成秘密密钥;
generateKey:生成密钥
DESedeKeySpec(byte[] key):创建一个 DESedeKeySpec 对象,使用 key 中的前 24 个字节作内为 DES-EDE 密钥的密钥内容。
IvParameterSpec:获取偏转向量
DECRYPT_MODE:表示加密模式
小结
1、介绍DES相关的算法以及实现原理。
2、在eclipse中分析DES算法代码。 前几天刚刚把AES CBC (Key 和 IV)和RSA的算法过了一遍AES是C语言写的 RSA是汇编的。有时间了我也写出来看看。 学习到了,感谢分享! 顶!感谢楼主分享 不错,来学习一些 学到了谢谢分享 感谢分享。 RC4、TEA、XOR路过,只求最快 正好我们开了网络密码 不明觉厉!