对称算法分类及加密模式
来源:互联网 发布:小米6陶瓷 知乎 编辑:程序博客网 时间:2024/06/07 08:33
对称算法分类
流加密(stream cipher)
加密和解密双方使用相同伪随机加密数据流(即密钥),一般都是逐位异或或者随机置换数据内容,常见的流加密算法如RC4。
流加密中,密钥的长度和明文的长度是一致的。假设明文的长度是n 比特,那么密钥也为n比特,可选择的密钥数量为:
加解密过程
明文P和密文S通过密钥K和异或操作进行转换。
关键技术
流密码的关键技术在于设计一个良好的##密钥流生成器##,即由种子密钥通过密钥流生成器生成伪随机流。
通信双方交换种子密钥即可(已拥有相同的密钥流生成器)。
分组加密(block cipher)
也叫块加密,将明文分成多个等长的模块(block),使用确定的算法和对称密钥对每组分别加密解密。
加密模式
对称算法有以下5种加密模式:
ECB
ECB模式是最早采用和最简单的模式,它将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密。
相同的明文会产生相同的密文。
其缺点是:电子密码本模式用一个密钥加密消息的所有块,如果原消息中重复明文块,则加密消息中的相应密文块也会重复。
因此,电子密码本模式适于加密小消息。
CBC
需要初始化向量IV(长度与分组大小相同)参与计算第一组密文,第一组的密文与第二组数据XOR计算后再进行加密产生第二组密文 。
安全性较好,TLS、IPSec等标准的推荐模式,但不利于并行运算。
加密运算不支持并行,解密运算支持并行。
CFB
面向字符的应用程序的加密要使用流加密法,可以使用加密反馈模式。在此模式下,数据用更小的单元加密,如可以是8位,这个长度小于定义的块长(通常是64位)。其加密步骤是:
1、使用length位的初始化向量。初始化向量放在移位寄存器中,在第一步加密,产生相应的length位初始化密文K;
2、初始化密文K高n位与明文前n位进行异或运算,产生密文第一部分c(密文块0),然后将c传输到接收方;
3、向量的位(即初始化向量所在的移位寄存器内容)左移n位,在移位寄存器最右边的n位填入c的内容,使其为不可预测的数据;
4、重复第1-3步,直到加密所有的明文单元。
仅解密支持并行计算
OFB
输出反馈模式与CFB相似,惟一差别是,CFB中密文填入加密过程下一阶段,而在OFB中,初始化向量加密过程的输出K的高n位填入加密过程下一阶段。
可事先进行加密、解密的准备,将分组密码转化为流模式。
不支持并行运算。
CTR
计算器模式(Counter (CTR))不常见,在CTR模式中, 有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密。支持并行计算
ref:
http://professor.blog.51cto.com/996189/1794740
http://www.cnblogs.com/littleatp/p/6196092.html
- 对称算法分类及加密模式
- 对称加密与非对称加密及常用算法
- 对称算法的四种加密模式
- 对称加密 非对称加密,常见算法
- 对称加密及非对称加密
- C#对称算法加密
- IDEA算法-对称加密
- AES加密对称算法
- Silverlight中非对称加密及数字签名RSA算法的实现
- Silverlight中非对称加密及数字签名RSA算法的实现
- .net对称算法数据加密
- 非对称加密---RSA算法
- 非对称加密 RSA算法
- 密码学——对称加密&加密模式
- Java深入 - 对称加密/非对称加密/签名算法
- 安全算法(二)对称加密和非对称加密
- 对称加密与非对称加密工具类及测试
- 对称算法中AES加密解密算法
- 关于闭包的问题
- 【转】一个程序员应该具备的基础知识和概念
- Spring boot 和 mybatis 学习笔记2--Mapper XML (静态)
- bzoj2014
- HTTP网络请求原理 (二) Http报文格式解析
- 对称算法分类及加密模式
- 资产盘点帐实相符的条码录入Excel方法
- 廖雪峰python教程之python代码运行助手
- c++子类重写父类方法(Override)
- git和github管理项目
- Servlet详解
- 书单
- 34. Search for a Range && 35. Search Insert Position
- error C2039: "nocreate": 不是"std::basic_ios<char,std::char_traits<char>>