aeskey长度_带你用Python实现AES对称加密

更新时间:2023-08-10 02:16:37 阅读: 评论:0

aeskey长度_带你⽤Python实现AES对称加密
前⾔
AES,⾼级加密标准(Advanced Encryption Standard)。是⽤来替代 DES,⽬前⽐较流⾏的对称加密算法。对称加密算法也就是加密和解密⽤相同的密钥,具体的加密流程如下图:
明⽂ P:等待加密的数据。
密钥 K:⽤来加密明⽂的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收⽅与发送⽅协商产⽣,但不可以直接在⽹络上传输,否则会导致密钥泄漏,通常是通过⾮对称加密算法加密密钥,
然后再通过⽹络传输给对⽅,或者直接⾯对⾯商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密⽂,窃取机密数据。
AES 加密函数:设 AES 加密函数为 E,则 C = E(K, P),其中 P 为明⽂,K 为密钥,C 为密⽂。也就是说,把明⽂ P 和密钥 K 作为加密函数的参数输⼊,则加密函数 E 会输出密⽂ C。
密⽂ C:经过 AES 加密后的数据。
AES 解密函数:设 AES 解密函数为 D,则 P = D(K, C),其中 C 为密⽂,K 为密钥,P 为明⽂。也就是说,把密⽂ C 和密钥 K 作为解密函数的参数输⼊,则解密函数会输出明⽂ P。
AES 只是个基本算法,实现 AES 有⼏种模式,主要有 ECB、CBC、CFB 和 OFB 这⼏种(其实还有个 CTR)。本章主要介绍最常⽤的ECB 和 CBC 模式。
代码实现与解析
初中英语教研组总结
1.ECB 模式
from Crypto.Cipher import AES
import ba64
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 aesEncrypt(key, data):
'''
AES的ECB模式加密⽅法
hold怎么读:param key: 密钥
:param data:被加密字符串(明⽂)
:return:密⽂
'''
key = de('utf8')
# 字符串补位
data = pad(data)
cipher = w(key, AES.MODE_ECB)
# 加密后得到的是bytes类型的数据,使⽤Ba64进⾏编码,返回byte字符串    result = de())
encodestrs = ba64.b64encode(result)
enctext = encodestrs.decode('utf8')
print(enctext)
莎拉大波娃return enctext
def aesDecrypt(key, data):
'''
whole
:param key: 密钥
:param data: 加密后的数据(密⽂)
:return:明⽂
'''
key = de('utf8')
data = ba64.b64decode(data)
cipher = w(key, AES.MODE_ECB)北京哪家留学机构好
# 去补位
text_decrypted = unpad(cipher.decrypt(data))
text_decrypted = text_decrypted.decode('utf8')
print(text_decrypted)
return text_decrypted
if __name__ == '__main__':
key = '5c44c819appsapi0'
译文翻译data = 'herish acorn'
职称英语考试准考证打印ecdata = aesEncrypt(key, data)
aesDecrypt(key, ecdata)
结果如下:
0FyQSXu3Q9Q13JGf4F74jA==
herish acorn
检测结果可以前往在线 AES 加密解密进⾏验证。
ECB 是最简单的块密码加密模式,加密前根据加密块⼤⼩(如 AES 为128位)分成若⼲块,之后将每块使⽤相同的密钥单独加密,解密同理。相对其他模式没有偏移量的设置,简单点,安全性差点。
AES 加密有 AES-128、AES-192、AES-256 三种,分别对应三种密钥长度 128bits(16字节)、192bits(24字节)、256bits(32字节)。当然,密钥越长,安全性越⾼,加解密花费时间也越长。默认的是AES-128,其安全性完全够⽤。
pad 和 unpad 分别是填充函数和逆填充函数。因为 AES 加密对加密⽂本有长度要求,必须是密钥字节数的倍数。这⾥的 key 的长度是
16 个字节。
关于填充算法,简单解释就是缺⼏位就补⼏:填充字符串由⼀个字节序列组成,每个字节填充该填充字节序列的长度。Python 代码中 ECB 模式进⾏ AES 加密默认就是 pkcs7padding 填充。
2.CBC 模式
CBC 模式对于每个待加密的密码块在加密前会先与前⼀个密码块的密⽂异或,然后再⽤加密器加密。第⼀个明⽂块与⼀个叫初始化向量的数据块异或。
from Crypto.Cipher  import AES
import ba64
# 密钥(key), 密斯偏移量(iv) CBC模式加密
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:])]
merry xmas是什么意思vi = '0102030405060708'
def AES_Encrypt(key, data):
data = pad(data)
# 字符串补位
cipher = de('utf8'), AES.MODE_CBC, vi.encode('utf8'))    encryptedbytes = de('utf8'))
# 加密后得到的是bytes类型的数据,使⽤Ba64进⾏编码,返回byte字符串    encodestrs = ba64.b64encode(encryptedbytes)
# 对byte字符串按utf-8进⾏解码
enctext = encodestrs.decode('utf8')
return enctext
def AES_Decrypt(key, data):
文明礼貌演讲稿
data = de('utf8')
encodebytes = ba64.decodebytes(data)
# 将加密数据转换位bytes类型数据
cipher = de('utf8'), AES.MODE_CBC, vi.encode('utf8'))    text_decrypted = cipher.decrypt(encodebytes)
# 去补位
text_decrypted = unpad(text_decrypted)
text_decrypted = text_decrypted.decode('utf8')
print(text_decrypted)
return text_decrypted
if __name__ == '__main__':
key = '5c44c819appsapi0'
data = 'herish acorn'
enctext = AES_Encrypt(key, data)
print(enctext)tenet
AES_Decrypt(key, enctext)
结果如下:
svAg4qrFNphvwS47DLSb2A==
herish acorn
相⽐ ECB 模式,CBC 模式主要是多了偏移量这⼀要素,偏移量的取值,⾄少 16 位,或者为 16 的倍数。

本文发布于:2023-08-10 02:16:37,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1128576.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:加密   密钥   数据   填充
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图