Python下的DES加密解密代码

和别的语言或者网站或者开发或软件对接交互的时候,直接明文传输是不那么妥当的,可以用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

评论0

没有账号? 注册  忘记密码?