DES加密模式详解
来源:互联网 发布:锐志轮毂数据 编辑:程序博客网 时间:2024/05/18 17:25
参考:
http://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html
http://www.blogjava.net/wayne/archive/2011/05/23/350879.html
加密算法常见的有ECB模式和CBC模式:
ECB模式:电子密本方式,这是JAVA封装的DES算法的默认模式,就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,则补足8个字节(注意:这里就涉及到数据补位了)进行计算,之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响。
CBC模式:密文分组链接方式,这是.NET封装的DES算法的默认模式,它比较麻烦,加密步骤如下:
1、首先将数据按照8个字节一组进行分组得到D1D2......Dn(若数据不是8的整数倍,就涉及到数据补位了)
2、第一组数据D1与向量I异或后的结果进行DES加密得到第一组密文C1(注意:这里有向量I的说法,ECB模式下没有使用向量I)
3、第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2
4、之后的数据以此类推,得到Cn
5、按顺序连为C1C2C3......Cn即为加密结果。
数据补位一般有NoPadding和PKCS7Padding(JAVA中是PKCS5Padding)填充方式,PKCS7Padding和PKCS5Padding实际只是协议不一样,根据相关资料说明:PKCS5Padding明确定义了加密块是8字节,PKCS7Padding加密快可以是1-255之间。但是封装的DES算法默认都是8字节,所以可以认为他们一样。数据补位实际是在数据不满8字节的倍数,才补充到8字节的倍数的填充过程。
NoPadding填充方式:算法本身不填充,比如.NET的padding提供了有None,Zeros方式,分别为不填充和填充0的方式。
PKCS7Padding(PKCS5Padding)填充方式:为.NET和JAVA的默认填充方式,对加密数据字节长度对8取余为r,如r大于0,则补8-r个字节,字节为8-r的值;如果r等于0,则补8个字节8。比如:
加密字符串为为AAA,则补位为AAA55555;加密字符串为BBBBBB,则补位为BBBBBB22;加密字符串为CCCCCCCC,则补位为CCCCCCCC88888888。
互联网的软件设计一定少不了加密算法,并且大量使用的都会是对称加密,比较常见的对称加密有:DES、3DES、RC4、AES等等;
加密算法都有几个共同的要点:
- 密钥长度;(关系到密钥的强度)
- 加密模式;(ecb、cbc等等)
- 块加密算法里的填充方式区分;
对于加密模式,很多同学还不清楚,比如DES,也会有ECB、CBC等不同的区分,它们都是标准的;
各种加密模式有什么不同呢:(为了方便,这里的加密key都取64位)
电子密码本模式ECB:
最古老,最简单的模式,将加密的数据分成若干组,每组的大小跟加密密钥长度相同;
然后每组都用相同的密钥加密, 比如DES算法, 如果最后一个分组长度不够64位,要补齐64位;
定义:
ECB加密算法可表示为:
ECB解密算法可以表示为:
- 每次Key、明文、密文的长度都必须是64位;
- 数据块重复排序不需要检测;
- 相同的明文块(使用相同的密钥)产生相同的密文块,容易遭受字典攻击;
- 一个错误仅仅会对一个密文块产生影响;
加密块链模式CBC:
算法特点:
- 每次加密的密文长度为64位(8个字节);
- 当相同的明文使用相同的密钥和初始向量的时候CBC模式总是产生相同的密文;
- 密文块要依赖以前的操作结果,所以,密文块不能进行重新排列;
- 可以使用不同的初始化向量来避免相同的明文产生相同的密文,一定程度上抵抗字典攻击;
- 一个错误发生以后,当前和以后的密文都会被影响;
加密反馈模式CFB:
加密反馈模式克服了需要等待8个字节才能加密的缺点,它采用了分组密码作为流密码的密钥流生成器;
- 每次加密的Pi和Ci不大于64位;
- 加密算法和解密算法相同,不能适用于公钥算法;
- 使用相同的密钥和初始向量的时候,相同明文使用CFB模式加密输出相同的密文;
- 可以使用不同的初始化变量使相同的明文产生不同的密文,防止字典攻击;
- 加密强度依赖于密钥长度;
- 加密块长度过小时,会增加循环的数量,导致开销增加;
- 加密块长度应时8位的整数倍(即字节为单位);
- 一旦某位数据出错,会影响目前和其后8个块的数据;
输出反馈模式OFB:
与CFB模式不同之处在于, 加密位移寄存器与密文无关了,仅与加密key和加密算法有关;
做法是不再把密文输入到加密移位寄存器,而是把输出的分组密文(Oi)输入到一位寄存器;
- 与CFB类似,以下都是不同之处;
- 因为密文没有参与链操作,所以使得OFB模式更容易受到攻击;
- 不会进行错误传播,某位密文发生错误,只会影响该位对应的明文,而不会影响别的位;
- 不是自同步的,如果加密和解密两个操作失去同步,那么系统需要重新初始化;
- 每次重新同步时,应使用不同的初始向量。可以避免产生相同的比特流,避免”已知明文”攻击 ;
Windows API进行加密参数设置:
使用加密要注意的地方:
使用加密以前确定你理解了它;
互联网程序中加密模式的使用:
- DES加密模式详解
- DES加密模式详解
- DES加密模式详解
- DES加密模式详解
- DES加密模式详解
- DES加密模式详解(zz)
- DES加密模式详解(二)
- DES加密模式详解(zz)
- DES加密模式原理详解
- DES加密模式详解(zz)
- 3DES加密模式
- 3DES加密模式
- DES加密详解
- DES加密、解密详解
- DES加密解密详解
- DES加密的详解
- DES加密的详解
- pytnon DES加密CBC模式
- MVC模式已死?何不试试MOVE
- Java-多线程基本
- 悲观锁和乐观锁
- OC总结1
- Java开发中的23种设计模式详解
- DES加密模式详解
- Object - C的知识总结->方法
- python eclipse 插件安装 及BeautifulSoup requests selenium在线安装 PhantomJS 安装 环境配置
- 几个常用的cmd命令
- java 静态变量与方法实例变量与方法的内存占用
- JavaScript事件
- LeetCode OJ 之 Power of Two (2的n次方)
- Andorid 应用程序资源
- 弄。。