之前我们已经研究过RSA
,并且RSA
是非对称加密
,非对称加密
有一对公钥
和私钥
。我们可以对数据用私钥
加密用公钥解密,也能用公钥加密用私钥来解密,这就是非对称加密
。那什么是对称加密
,对称加密
有哪些呢,又有哪些使用场景呢?
对称加密算法&模式
对称加密就是明文通过秘钥
(key)加密后得到密文,密文通过秘钥解密得到明文。但注意Hash是不是加密算法。常见对称加密算法有DES
、3DES
、AES
。
-
DES
:数据加密标准。这种加密方式用得少,加密强度不够。 -
3DES
:使用3个秘钥,对相同的数据执行3次加密,强度增强。 -
AES
:高级密码标准。
总结:DES
、3DES
、AES
的区别在于三者的加密强度不同。
对称加密有两种应用模式
,分别是ECB(Electronic Code Book)
、CBC(Cipher Block Chaining)
。 -
ECB
:电子密码本模式。每一块数据,独立加密。 -
CBC
:密码分组链接模式。使用一个密钥和一个初始化向量IV对数据执行加密
终端测试指令
加密过程
1、加密过程是先加密,再base64编码
2、解密过程是先base64解码,再解密
DES加密&解密
- 使用DES(ECB)加密
echo -n "需要加密的字符串" | openssl enc -des-ecb -K "密钥" -nosalt | base64
- 使用DES(ECB)解密
echo -n "需要解密的字符串" | base64 -D | openssl enc -des-ecb -K "密钥" -nosalt -d
- DES(CBC)加密
echo -n "需要加密的字符串" | openssl enc -des-cbc -iv "向量" -K "密钥" -nosalt | base64
- DES(CBC)解密
echo -n "需要加密的字符串" | base64 -D | openssl enc -des-cbc -iv "向量" -K "密钥" -nosalt -d
AES加密&解密
- AES(ECB)加密
echo -n "需要加密的字符串" | openssl enc -aes-128-ecb -K "密钥" -nosalt | base64
- AES(ECB)解密
echo -n "需要加密的字符串" | base64 -D | openssl enc -aes-128-ecb -K "密钥" -nosalt -d
[图片上传失败...(image-127fb8-1629994064213)]
- AES(CBC)加密
echo -n "需要加密的字符串" | openssl enc -aes-128-cbc -iv "向量" -K "密钥" -nosalt | base64
- AES(CBC)解密
echo -n "需要加密的字符串" | base64 -D | openssl enc -aes-128-cbc -iv "向量" -K "密钥" -nosalt -d
补充:加密跟几何图形关联,加密时增加向量,增加了破解的难度。如果加密强度比较小,生成的结果大小 也比较小。CBC的加密模式通常用于防窃听使用场景 后续的加密依赖前面的数据。
使用终端对文件加密测试
ECB模式
1、终端输入vi abc.txt
创建文件并输入内容
2、终端输入openssl enc -des-ecb -K 61626364 -nosalt -in abc.txt -out message.bin
使用DES的ECB 模式加密并输出二进制文件
3、终端输入cat message.bin
获取二进制文件
4、终端输入xxd message.bin
输出二进制文件
5、终端输入openssl enc -des-ecb -K 61626364 -nosalt -d -in message.bin -out 解密message1.txt
解密二进制文件并输出解密后的文件
CBC模式
1、终端输入vi abc.txt
创建文件并输入内容
2、终端输入openssl enc -des-cbc -K 61626364 -iv 010203040506 -nosalt -in abc.txt -out message.bin
使用DES的CBC模式加密并输出二进制文件
3、终端输入cat message.bin
获取二进制文件
4、终端输入xxd message.bin
输出二进制文件
5、终端输入openssl enc -des-cbc -K 61626364 -iv 010203040506 -nosalt -d -in message.bin -out 解密abc.txt
解密二进制文件并输出解密后的文件
我们将abc.txt文件内容修改比较一下ECB和CBC模式加密得到的二进制的区别
)
通过加密后二进制结果可以看出cbc模式只是修改位置的二进制发生了改变,ECB模式修改位置后面的二进制都发生了改变
代码测试 源码地址
总结:
-
ECB
最基本的加密模式,也就是通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般很少用。 -
CBC
明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文,这是目前应用最广泛的模式。CBC
加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废。
网友评论