对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。对称加密只有一个秘钥,作为私钥。
常见的对称加密算法:DES,AES,3DES等。
非对称加密
非对称加密指的是:对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。
常见的非对称加密算法:RSA,DSA,ECC等。
ASE 常用的加密模式:
常用的加密模式有 4 种,分别是 ECB(电子密码本模式)、CBC(密码分组链接模式)、CFB、OFB,一般使用 CBC 模式,四种模式除了 ECB 相对不安全外,其它三种模式没有太大的差别。
# 使用库pycryptodome 3.9.7
from Crypto.Cipher import AES
# 密码长度一般为16、24、32 使用空格补足长度
def auto_fill(x):
if len(x) <= 32:
while len(x) not in [16, 24, 32]:
x += " "
return x.encode()
else:
err_msg = "密码长度不能超过32位"
return err_msg
# 需加密数据的二进制长度应为 16 的整数倍 使用空格补足长度
def add_to_16(text):
if len(text.encode('utf-8')) % 16:
add = 16 - (len(text.encode('utf-8')) % 16)
else:
add = 0
text = text + (' ' * add)
return text.encode('utf-8')
def encrypt(text):
global key, iv, mode
cipher = AES.new(auto_fill(key), mode, add_to_16(iv))
encr_text = cipher.encrypt(add_to_16(text))
return encr_text
def decrypt(encr_text):
global key, iv, mode
cipher = AES.new(auto_fill(key), mode, add_to_16(iv))
text = cipher.decrypt(encr_text).decode()
return text
key = "123456"
iv = 'AAAAAA'
mode = AES.MODE_CBC
text = '唧唧复唧唧...'
encr_text = encrypt(text)
print(encr_text)
text = decrypt(encr_text)
print(text)
# 结果
"""
b'\xf7\x8dB\x1cA0\xb9\xc8+2Z\x8e\xf7\x94\xb6\xaeqW\x01\x0e\xcf\xf0\x87o\xcd\xb4u\xb6\xbe\x9aL\x98'
唧唧复唧唧...
"""
待续。。。