和别的语言或者网站或者开发或软件对接交互的时候,直接明文传输是不那么妥当的,可以用DES简单加密下,至少不会一眼就看的见参数。安全些也有些许保障。
需要pyDes库; pip install pyDes ,注意秘钥只能是八位字符串
# des模式 填充方式 ECB加密方式
from pyDes import des, PAD_PKCS5, ECB
def des_encrypt(str_):
"""
本函数用des加密,加密后再base64一下,便于网络传输,对应的解密函数秘钥应一致, 返回一个base64字符串
:param str_: 要加密的字符串
:return: 返回一个加密后的base64字符串
"""
# 秘钥 (对接时,两边要有相同的秘钥)
DES_SECRET_KEY = '12345678'
""" 这里中文要转成字节, 英文好像不用 """
encrypt_str = str_.encode()
""" 初始化一个des对象,参数是秘钥,加密方式,偏移, 填充方式 """
des_obj = des(DES_SECRET_KEY, ECB, DES_SECRET_KEY, padmode=PAD_PKCS5)
""" 用对象的encrypt方法加密 """
secret_bytes = des_obj.encrypt(encrypt_str)
""" 把secret_bytes字节转成base64并decode成字符串进行传输 """
base64_str = base64.b64encode(secret_bytes).decode()
return base64_str
def des_decrypt(base64_str):
"""
:param base64_str: 要解密的base64字符串
:return: 解密后的字符串
"""
# 秘钥,对接两边要有相同的秘钥)
DES_SECRET_KEY = '12345678'
""" 初始化一个des对象,参数是秘钥,加密方式,偏移, 填充方式 """
des_obj = des(DES_SECRET_KEY, ECB, DES_SECRET_KEY, padmode=PAD_PKCS5)
""" 把base64先解成byte后再解密 """
if len(base64_str) % 2 != 0: # 要是不能被整除,需要在加密base64字符串后加个=号,要不问为什么,就是这么规定的,要不有时会报错
base64_str = base64_str + '='
else:
base64_str = base64_str + '=='
base64_types = base64_str.encode()
secret_bytes = base64.b64decode(base64_types)
""" 用对象的decrypt方法解密 """
s = des_obj.decrypt(secret_bytes)
return s.decode()
a = des_encrypt('{"aaa": 这是一个测试}')
b = des_decrypt(a)
print('a', type(a), a)
print('b', type(b), b)
原文链接:http://www.itawp.com/274.html,转载请注明出处。
评论0