废话不多说,直接开干!
先看看加密网址访问地址
介绍加密说明,百度得知!
AES
AES,高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128 比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。包括AES-ECB,AES-CBC,AES-CTR,AES-OFB,AES-CFB
明文
是指没有加密的文字(或者字符串),一般人都能看懂的意思,属于密码学术语。 [1] 在通信系统中它可能是比特流,如文本、位图、数字化的语音或者数字化的视频图像等。一般可以简单地认为明文是有意义的字符或比特集,或通过某种公开的编码标准就能获得的消息。经过某个加密算法进行作用,将作用后的文字称为密文。对密文来说,若想得到明文,就应通过与加密算法对应的解密算法进行解密,恢复出明文。
密钥
用来加密明文的密码(对称加密中加解密为同一个密钥)
密钥传输
不可以直接在网络上传输,否则会导致密钥泄漏,通常是 通过非对称加密算法加密密钥,然后再通过网络传输给对方 ,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据。
加密函数
设AES加密函数为E,则 C = E(K, P),其中P为明文,K为密钥,C为密文。也就是说,把明文P和密钥K作为加密函数的参数输入,则加密函数E会输出密文C
解密函数
设AES解密函数为D,则 P = D(K, C),其中C为密文,K为密钥,P为明文。也就是说,把密文C和密钥K作为解密函数的参数输入,则解密函数会输出明文P
密文来源
大概意思是经过加密函数处理后的数据
最后我们上代码测试一下!
遇到Cryptodome问题,解决方法如下链接
解决Crypto无法加载问题
from Cryptodome.Cipher import AES
import base64
BLOCK_SIZE = 16 # Bytes
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * \
chr(BLOCK_SIZE - len(s) % BLOCK_SIZE)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
def Encrypt(key, data):
"""
AES长度为:32, 48, or 64,
"""
key = key.encode('utf8')
data = pad(data)
cipher = AES.new(key, AES.MODE_ECB)
# 加密后得到的是bytes类型的数据,使用Base64进行编码,返回byte字符串
result = cipher.encrypt(data.encode())
encodestrs = base64.b64encode(result)
enctext = encodestrs.decode('utf8')
return enctext
def Decrypt(key, data):
"""
AES长度为:32, 48, or 64,
"""
key = key.encode('utf8')
data = base64.b64decode(data)
cipher = AES.new(key, AES.MODE_ECB)
text_decrypted = unpad(cipher.decrypt(data))
text_decrypted = text_decrypted.decode('utf8')
return text_decrypted
if __name__ == '__main__':
# 密钥
key = '1c55c819appuiop0'
# 需要加密数据
data = 'my name is soubei'
ecdata = Encrypt(key, data)
print(ecdata)
dec = Decrypt(key, ecdata)
print(dec)
运行结果
+P0/Pog35SVVpsVs1f7dWR1mplJfrreP/WDMcAb78AE=
my name is soubei
Process finished with exit code 0