from Crypto import Random
from Crypto.Cipher import AES
import base64
from hashlib import md5
def pad(data):
length = 16 - (len(data) % 16)
return data.encode(encoding='utf-8') + (chr(length)*length).encode(encoding='utf-8')
def unpad(data):
return data[:-(data[-1] if type(data[-1]) == int else ord(data[-1]))]
def bytes_to_key(data, salt, output=48):
data=data.encode(encoding='utf-8')
assert len(salt) == 8, len(salt)
data += salt
key = md5(data).digest()
final_key = key
while len(final_key) < output:
key = md5(key + data).digest()
final_key += key
return final_key[:output]
def encrypt(message, passphrase):
salt = Random.new().read(8)
key_iv = bytes_to_key(passphrase, salt, 32+16)
key = key_iv[:32]
iv = key_iv[32:]
aes = AES.new(key, AES.MODE_CBC, iv)
return base64.b64encode(b"Salted__" + salt + aes.encrypt(pad(message)))
def decrypt(encrypted, passphrase):
encrypted = base64.b64decode(encrypted)
assert encrypted[0:8] == b"Salted__"
salt = encrypted[8:16]
key_iv = bytes_to_key(passphrase, salt, 32+16)
key = key_iv[:32]
iv = key_iv[32:]
aes = AES.new(key, AES.MODE_CBC, iv)
return unpad(aes.decrypt(encrypted[16:]))
if __name__ == '__main__':
key = 'seurtl23'
data = 'oracless'
encrypt_data = encrypt(data, key)
print(encrypt_data)
decrypt_data = decrypt(encrypt_data, key)
print(decrypt_data)
没有合适的资源?快使用搜索试试~ 我知道了~
python AES加密解密,key的长度不受限制
共1个文件
py:1个
需积分: 1 0 下载量 161 浏览量
2024-05-17
00:42:59
上传
评论
收藏 921B ZIP 举报
温馨提示
解密制度
资源推荐
资源详情
资源评论
收起资源包目录
python_AES.zip (1个子文件)
python_AES
python_aes.py 1KB
共 1 条
- 1
资源评论
月流霜
- 粉丝: 1215
- 资源: 168
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功