有时我们需要对一些重要的数据进行加密,如应用签名,qq
授权的openid
等。
安全加密
下面介绍一下,它可以对一下敏感数据进行加密,可通过
pip
直接安装。下面是使用在django
中的常用加密方式。
from itsdangerous.jws import TimedJSONWebSignatureSerializer as Serializerfrom django.conf import settingsdef dumps(dict, expires): ''' 将字典加密,返回加密字符串 :param dict:字典 :param expires:过期时间 :return:字符串 ''' serializer = Serializer(settings.SECRET_KEY, expires_in=expires) json_str = serializer.dumps(dict).decode() return json_str复制代码
上面利用应用中密钥进行加密,这个数据一般不会暴露出去,而且我们还设置了过期时期,所有理论上就破解不了。我们自己如果想解密,采取下面的方式。这可以应用在一些敏感数据的验证。
def loads(json_str, expires): ''' 将加密字符串解密 :param json_str: 加密字符串 :return: 字典 ''' serializer = Serializer(settings.SECRET_KEY, expires_in=expires) try: dict = serializer.loads(json_str) except: # 如果字符串被修改过,或超期,会抛异常 return None else: return dict复制代码
对称加密
base64是一种对称加密方式,是可逆的。用于对一些不太重要的数据加密。
import pickleimport base64def dumps(dict): '''将字典转换成bytes''' json_bytes = pickle.dumps(dict) # 加密 json_secret = base64.b64encode(json_bytes) # 转字符串 json_str = json_secret.decode() return json_strdef loads(json_str): '''字符串转bytes''' json_secret = json_str.encode() # 解密 json_bytes = base64.b64decode(json_secret) # 转字典 json_dict = pickle.loads(json_bytes) return json_dict复制代码
base64的加密和解密传入的参数是bytes,如果要对字典dict
加密,可利用pickle
模块先转换为bytes类型再进行操作。