对称加密与公钥加密(上)
来源:互联网 发布:mac电脑安装flash 编辑:程序博客网 时间:2024/04/29 08:29
接着上一篇初入密码学世界,这一篇博客我们将介绍以下内容,先来一个思维导图,看看这篇博客的内容
以上内容在这篇博客中我都会详细地讲解,当然,这只是个大体的架构图,很多细节的知识点没有包含进去。
对称密码
在开篇之前,先说几个名词
比特序列:对于这个词,学过任何一门编程语言的人都不陌生,其实它就是0和1排列而成的数字
编码:将现实世界中的东西映射为比特序列的过程称为编码
XOR:看到这三个英文字母,是不是一脸懵逼呢,它的中文名叫异或
DES,AES,Rijndael这里先不解释,到讲到它们的时候再做解释
1.异或
这里,我们就简单先说一下异或,因为对称加密中它很重要
1个比特的XOR运算规则如下
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 1 = 0
1 XOR 0 = 1
XOR用符号,这玩意儿不画图,我还不好操作,下面我们还是使用XOR吧
现在我们来看个例子
0 1 0 0 1 1 0 0 --------- A
XOR
1 0 1 0 1 0 1 0 ----------B
等于
1 1 1 0 0 1 1 0 ---> A XOR B
-----------------------------------------------------------------------------------------------------------------
1 1 1 0 0 1 1 0 --->A XOR B
XOR
1 0 1 0 1 0 1 0 -------------B
等于
0 1 0 0 1 1 0 0 -------->变回了 A
-------------------------------------------------------------------------------------------------------------------
上面这个例子干了什么事呢,大家应该看明白了吧
将明文 A 用密钥 B 进行加密,得到密文A XOR B
将密文 A XOR B 用密钥 B 进行解密,得到明文 A
对于密码技术来说,“是否可以预测”是非常重要的一点,能够产生不可预测的比特序列,对于密码学技术贡献是巨大的。这种不可预测的比特序列就称为随机数。关于这个问题以后的博文中再做介绍
2.一次性密码本(维纳密码)
原理就是将明文与一串随机比特序列进行XOR运算,与上面的算法一致,不多做解释。
特点:在理论上是无法破解的
由于一次性密码本并没有什么卵用,故而不在这里不多讲,有兴趣的人自己去查资料。虽然一次性密码本是一种几乎没有实用性的密码,但是,一次性密码本的思路却孕育出了流密码。流密码使用的不是真正的随机比特序列,而是伪随机数生成器产生的比特序列。流密码虽然不是无法破译的,但是只要使用高性能的伪随机数生成器,就能够构建出强度较高的密码系统。关于流密码下面会详细介绍。关于伪随机数生成器估计要在后面的博文中才能介绍。
3、DES
DES是一种将64比特的明文加密成64比特的密文的对称密码算法,它的密钥长度是56比特。为什么密钥长度只有56比特呢,原因是每隔7个比特位会设置一个用于错误检查的比特,因而其密钥长度是56位。
DES是以64比特的明文(比特序列)为一个单位来进行加密的,这个64比特的单位称为分组。DES其实就是分组密码中的一种。
DES每次只能加密64比特的数据,如果要加密的明文长度比较长,就需要对DES加密进行迭代,迭代的具体方式成为模式(mode)
4.DES的结构(Feistel网络)
在Feistel网络中,加密的各个步骤称为轮(round),整个加密过程就是进行若干次轮的循环
总结一下,一轮的具体步骤如下
(1) 将输入的数据等分为左右两部分
(2) 将输入的右侧直接发送到输出右侧
(3) 将输入的右侧发送到轮函数
(4) 轮函数根据右侧的数据和子密钥,计算出一串看上去是随机的比特序列
(5) 将上一侧得到的比特序列与左侧数据进行XOR运算,并将结果做为加密后的左侧
DES的加密和解密过程很相似,只要对调密钥就可以,这里不多说
特点
a.轮数可以任意增加
b.加密无论用任何函数作为轮函数都可以正确解密
c.加密和解密可以用完全相同的结构来实现
4.三重DES
将DES重复三次所得到的一种密码算法,也称为TDEA。出现3DES的原因很简单,DES已经可以在短时间内暴力破解啦。
5.AES/Rijndael
Rijndael是新一代密码算法---->AES
和DES一样,Rijndael算法也是由多个轮组成,每一轮分为SubBytes,ShiftRows, MixColumns,AddRoundKey四个步骤;Rijndael使用SPN结构。Rijndael的输入分组为128比特,也就是16字节
在Rijndael加密过程中,每一轮的处理为
SubBytes--->ShiftRows--->MixColumns--->AddRoundKey
而在解密时,则反过来
AddRoundKey--->MixColumns--->ShiftRows--->SubBytes
- 对称加密与公钥加密(上)
- 对称加密与公钥加密(下)
- 对称加密与公钥加密(中)
- 对称加密,单向加密,公钥加密
- 对称密钥加密(私钥加密) 和 非对称密钥加密(公钥加密)
- java 非对称加密(公钥加密)
- 私钥加密(对称加密)
- 对称加密与非对称加密
- 对称加密与非对称加密
- 对称加密与非对称加密
- 对称加密与非对称加密
- 对称加密与非对称加密 浅析
- 对称加密与非对称加密
- 对称加密与非对称加密
- 计算机网络 对称加密与非对称加密
- 对称加密与非对称加密
- 对称加密与非对称加密
- 对称加密与非对称加密
- 传智播客-Android开发学习随笔-2
- redis持久化RDB和AOF
- 面试题整理
- composer中国镜像安装/配置
- VS下EXE可执行文件启动代码剖析(3)_ioinit 函数
- 对称加密与公钥加密(上)
- NSURL包含特殊字符处理
- FastFeatureDetector的坐标获取
- 结束日期必须大于开始日期--My97DatePicker日历控制的又一方便之处
- session/cookie
- 深入理解Java虚拟机:实战OutOfMemoryError
- 【VC编程】笔记1--创建一个Win32的应用程序,并显示创建的窗口和菜单
- 作业2
- 自定义InputFormat