54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
|
import base64
|
|||
|
from Crypto.Cipher import AES # 安装:pip install pycryptodome
|
|||
|
|
|||
|
|
|||
|
# 密钥(key), 密斯偏移量(iv) CBC模式加密
|
|||
|
# base64 详解:https://cloud.tencent.com/developer/article/1099008
|
|||
|
|
|||
|
_key = '0CoJUm6Qywm6ts68' # 自己密钥
|
|||
|
|
|||
|
|
|||
|
def aes_encrypt(data: str):
|
|||
|
"""
|
|||
|
加密
|
|||
|
"""
|
|||
|
vi = '0102030405060708'
|
|||
|
pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16)
|
|||
|
data = pad(data)
|
|||
|
# 字符串补位
|
|||
|
cipher = AES.new(_key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
|
|||
|
encrypted_bytes = cipher.encrypt(data.encode('utf8'))
|
|||
|
# 加密后得到的是bytes类型的数据
|
|||
|
encode_strs = base64.urlsafe_b64encode(encrypted_bytes)
|
|||
|
# 使用Base64进行编码,返回byte字符串
|
|||
|
# 对byte字符串按utf-8进行解码
|
|||
|
return encode_strs.decode('utf8')
|
|||
|
|
|||
|
|
|||
|
def aes_decrypt(data):
|
|||
|
"""
|
|||
|
解密
|
|||
|
"""
|
|||
|
vi = '0102030405060708'
|
|||
|
data = data.encode('utf8')
|
|||
|
encode_bytes = base64.urlsafe_b64decode(data)
|
|||
|
# 将加密数据转换位bytes类型数据
|
|||
|
cipher = AES.new(_key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
|
|||
|
text_decrypted = cipher.decrypt(encode_bytes)
|
|||
|
unpad = lambda s: s[0:-s[-1]]
|
|||
|
text_decrypted = unpad(text_decrypted)
|
|||
|
# 补位
|
|||
|
text_decrypted = text_decrypted.decode('utf8')
|
|||
|
return text_decrypted
|
|||
|
|
|||
|
|
|||
|
if __name__ == '__main__':
|
|||
|
_data = '16658273438153332588-95YEUPJR' # 需要加密的内容
|
|||
|
|
|||
|
enctext = aes_encrypt(_data)
|
|||
|
print(enctext)
|
|||
|
|
|||
|
# enctext = "Wzll1oiVs9UKAySY1-xSy_CbrZmelVwyqu8P0CZTrrc="
|
|||
|
# _text_decrypted = aes_decrypt(_key, enctext)
|
|||
|
# print(_text_decrypted)
|