0%

对称加密

对称加密

明文通过密钥加密得到密文。密文通过密钥解密得到明文。

这类算法再加密和解密时使用相同的密钥,或是使用两个可以简单的互相推算的密钥。与公开密钥加密相比,要求双方获取相同的密钥是对称加密的主要缺点之一。

DES - 数据加密标准

数据加密标准(Data Encryption Standard),简称DES。是一种对称密钥加密块密码算法。

DES是一种典型的块密码。一种将明文分成若干个固定长度的小块,再通过一系列的加密生成同样长度的密文的算法。对DES而言,块长度为64位(8个字节)。

强度不够,现在使用较少。

3DES - 三重数据加密算法

英文名称:Triple Data Encryption Algorithm,缩写为TDEA。也被称为3DES(Triple DES)。是一种对称密钥加密块密码,相当于是对每个数据块应用三次DES算法。

就是因为DES强度过低容易被暴利破解,3DES则是在DES的基础上演变过来的。采用3个密钥,即通过增加DES密钥长度来避免被暴利破解。

AES - 高级加密标准

AES(Advanced Encryption Standard)是用来代替DES的高级加密算法。AES的区块长度固定为128比特,密钥长度则可以是128,192或256比特。

分组密码

分组密码的数学模型是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的密文序列。

ECB模式

ECB(Electronic Codebook,电码本)模式是分组密码的一种最基本的工作模式。在该模式下,待处理信息被分为大小合适的分组,然后分别对每一分组独立进行加密或解密处理。

ECB的特点

  1. 是分组密码最基本的工作模式,操作简单,易于实现。
  2. 所有分组的加密方式一致,明文中重复内容会在密文中体现。不能很好的隐藏数据。

CBC模式

CBC指的是密码分组链接。

在CBC模式中,每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量。

CBC的特点

  1. CBC是最常用的工作模式
  2. CBC加密依赖分组的上下文,加密过程是串行的,无法并行化。
  3. 明文中微小的变动,会影响后续所有的密文块多改变。
  4. 其中一个分组丢失(错误),后续所有的都将作废

CBC可以有效的保证密文的完整性,如果一个分组数据块丢失或改变,后续的数据都将无法正常解密。

IV 初始化向量

初始化向量(IV,Initialization Vector)是许多任务作模式中用于将加密随机化的一个位块,由此即使同样的明文被多次加密也会产生不同的密文,避免了较慢的重新产生密钥的过程。

在CBC模式下,同一密钥的情况下重用IV会导致泄露明文首个块的信息。

终端命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* 终端测试指令
*
* DES(ECB)加密,key是必须的,
* $ echo -n hello | openssl enc -des-ecb -K 'abc' -nosalt | base64
*
* DES(ECB)解密
* $ echo -n P8TeEbkBDds= | base64 -D | openssl enc -des-ecb -K 'abc' -nosalt -d
* DES(CBC)加密
* $ echo -n hello | openssl enc -des-cbc -iv 12345678 -K 'abc' -nosalt | base64
*
* DES(CBC)解密
* $ echo -n fGkwzGbNomY= | base64 -D | openssl enc -des-cbc -iv 12345678 -K 'abc' -nosalt -d
*
* ----------------------
*
* AES(ECB)加密 密钥长度128,192或256比特
* $ echo -n hello | openssl enc -aes-128-ecb -K 'abc' -nosalt | base64
*
* AES(ECB)解密
* $ echo -n p+nWPDBu7iGX0ZXgw3jAXw== | base64 -D | openssl enc -aes-128-ecb -K 'abc' -nosalt -d
*
* AES(CBC)加密
* $ echo -n hello | openssl enc -aes-128-cbc -iv 12345678 -K 'abc' -nosalt | base64
*
* AES(CBC)解密
* $ echo -n jK4VTW/k7P8PsmW16ztlCw== | base64 -D | openssl enc -aes-128-cbc -iv 12345678 -K 'abc' -nosalt -d
*
*/

加密过程是先加密,然后再base64编码。
解密过程是先base64解码。然后再解密。

引用

DES-数据加密标准
3DES
AES - 高级加密标准
分组密码工作模式-ECB、CBC等
ECB模式-百度百科