[Python3]数据的加密解密
哈希werkzeug.security:
此模块包含了加盐哈希函数方法.
- generate_password_hash:加密
- check_password_hash: 验证
常见场景:
- 用于Flask登录验证模块.
from werkzeug.security import generate_password_hash, check_password_hash#generate_password_hash:哈希加盐
users=[{'username': 'Tom', 'password': generate_password_hash('111111')},{'username': 'Michael', 'password': generate_password_hash('123456')}
]print(users)
bools=check_password_hash(users[0]['password'], "111111") #True or False
print(bools)#输出结果:
"""
[{'username': 'Tom', 'password': 'pbkdf2:sha256:260000$vEXq6oPv5K5FsCFM$cb2a2630a3fba671b1ed2f48a14cbc4073aeba13cc914e79bf4abbc3ea07aadd'}, {'username': 'Michael', 'password': 'pbkdf2:sha256:260000$r5648R87Dx8EOWR2$ad370d27537407dcdfe6d13db4e48bea9c993f1af26e5d07300f3b3f7126ae68'}]False
"""
AES加密解密:
模块:Crypto.Cipher 、Crypto.Util.Padding
注:window和Linux下载模块不同,且注意加密密钥(KEY)要保密,不要流出:
- window:pip install pycryptodome
- Linux:pip install pycrypto
常见场景:
- 用于应用后端与其他项目交互传数据的时候加密解密.
import json
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import hashlib,base64#key的长度必须为16位,不然报错
AES_KEY="!@qw#$ert%^y&*u("class AES_Convert:def __init__(self):self.key = AES_KEY#aes 加密def Encryption(self,aes_str):# 使用key,选择加密方式aes = AES.new(self.key.encode('utf-8'), AES.MODE_ECB)pad_pkcs7 = pad(aes_str.encode('utf-8'), AES.block_size, style='pkcs7') # 选择pkcs7补全encrypt_aes = aes.encrypt(pad_pkcs7)# 加密结果encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8') # 解码encrypted_text_str = encrypted_text.replace("\n", "")return encrypted_text_str# aes解码def Decryption(self, aes_str):aes = AES.new(self.key.encode('utf-8'), AES.MODE_ECB)# 优先逆向解密base64成bytesbase64_decrypted = base64.decodebytes(aes_str.encode(encoding='utf-8-sig'))decrypted_text = str(aes.decrypt(base64_decrypted), encoding='utf-8-sig').replace('', '')# 注意这里解密会产生乱码,所以加密数据时可以用正则匹配掉乱码,具体问题具体对待# 这里传输的是json字符可以用这种方式匹配# print(decrypted_text)# decrypted_text=re.findall('.*\}',decrypted_text)[0]# decrypted_text = re.findall('.*\]', decrypted_text)[0]return decrypted_textif __name__ == '__main__':datalist=[{"username":"Ton","password":"Ton@.com"},{"username":"Michael","password":"Michael@.com"},]aes_str=json.dumps(datalist)EncryptionData = AES_Convert().Encryption(aes_str)DecryptionData = AES_Convert().Decryption(EncryptionData)print("加密数据:"+EncryptionData)print("加密解密:"+DecryptionData)#输出:
"""
加密数据:7+S0Fk5WHEZjOqbAYV/x3CpJ0lg6kTJU8RKRc2+CsR8rY/1Q8Mw9DrAAVGx/y0/iYoO/0l9Yb6wUdH11fuEHvZG6S+zQdrTN/flF2qxq383hyNETNW7ZCZXv2bTtEaG4z9noeXj6SgH3lhNTX5hZOw==
加密解密:[{"username": "Ton", "password": "Ton@.com"}, {"username": "Michael", "password": "Michael@.com"}]
"""
JWT加密解密:
python3内置模块:jwt
注:注意加密密钥(KEY)要保密,不要流出
常见场景:
- 用于应用前后端认证时的token.
import jwt,datetime
SECRECT_KEY="!@qw#$ert%^y&*u("class Jwt:def __init__(self):self.SECRECT_KEY = SECRECT_KEY# 生成jwt 信息,加密def jwtEncoding(self,username=None,id=None, some='xxxx'):datetimes=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")option = {"time":datetimes,"username":username,"id":id,"some":some}jwtencode = jwt.encode(option, self.SECRECT_KEY, algorithm='HS256')return jwtencode# 解密jwt 信息def jwtDecoding(self,token):try:decoded = jwt.decode(token, self.SECRECT_KEY, algorithms=['HS256'])except jwt.ExpiredSignatureError:decoded = {"error_msg": "is timeout !!", "some": None}except Exception:decoded = {"error_msg": "noknow exception!!", "some": None}return decodedif __name__ == '__main__':jwtencode = Jwt().jwtEncoding(username='admin', id=1)print(jwtencode)jwtdeode = Jwt().jwtDecoding(jwtencode)print(jwtdeode)#输出
"""
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0aW1lIjoiMjAyMS0wNy0wOSAxOToxMTozMyIsInVzZXJuYW1lIjoiYWRtaW4iLCJpZCI6MSwic29tZSI6Inh4eHgifQ._fwyzwnpeoI5fYBETc-R67T1mzxazMDkPtHvvWAZ4lo
{'time': '2021-07-09 19:11:33', 'username': 'admin', 'id': 1, 'some': 'xxxx'}
"""
[Python3]数据的加密解密相关推荐
- 与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密...
原文:与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密 [索引页] [源码下载] 与众不同 w ...
- java使用DES加密方式,实现对数据的加密解密
全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用DES加密方式,实现对数据的加密解密.加密和解密中需要使用同一个秘钥 第一种方式,使用类型Key作为加密解密的共同秘钥. 测试代码 p ...
- 一种简单的,适合单片机的,数据加密解密方法,仅需要调用两个函数即可完成数据的加密解密
一种简单的,适合单片机的,数据加密解密方法,仅需要调用两个函数即可完成数据的加密解密 本人原创,源码可移步:https://gitee.com/demyli/easy-encrypt.git /*** ...
- cocos2d-js 手游解密jsc和WebSocket数据aes加密解密分析②
前面的http授权成功后,用的是WebSocket进行登录 Fiddler 抓包显示 双击进入插件详情,发现是加密的,那就进入js源码看看 js源码看看 搜索bufferToData后,得到关键代码 ...
- C# 数据的加密解密
/// <summary> /// 加密数据 /// </summary> /// <param name="Text"></param& ...
- AES在线加密解密-附AES128,192,256,CBC,CFB,ECB,OFB,PCBC各种加密
一.AES在线加密解密:AES 128/192/256位CBC/CFB/ECB/OFB/PCBC在线加密解密|在线工具|在线助手|在线生成|在线制作 http://www.it399.com/aes ...
- angular和JAVA实现aes、rsa加密解密,前后端交互,前端加解密和后端JAVA加解密实现
今天实现了下AES和RSA加密解密,主要的功能是对前后端交互数据进行加密解密,为什么要用到两个算法呢,首先RSA默认的话加密长度是有限的100多个byte吧大约,并且需要公钥私钥,而AES加密没有限制 ...
- java php rsa加密解密算法_PHP rsa加密解密算法原理解析
php服务端与客户端交互.提供开放api时,通常需要对敏感的部分api数据传输进行数据加密,这时候rsa非对称加密就能派上用处了,下面通过一个例子来说明如何用php来实现数据的加密解密 1.加密解密的 ...
- pgp解密 java_Java PGP加密解密实例教程详细操作步骤
本文将一步步告诉大家PGP的使用步骤,看完大家就立马可以在项目及工作环境中使用起来,so easy!!! 1,首先了解什么是PGP,PGP的工作原理是什么?这个直接百度百科,我不啰嗦. PGP是英文 ...
最新文章
- 负载均衡中使用 Redis 实现共享 Session
- mongodb windwos 安装(转)
- ASP.NET基础教程-DataGrid表格控件-模板列的使用
- 20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结
- boost::geometry:::detail::overlay::get_clusters用法的测试程序
- aspen怎么做灵敏度分析_数据分析终极难题:数据分析怎么做才能驱动业务?
- django 修改html无变化,Django Pycharm 修改html后立即刷新页面
- ASP.NET使用Coolite.Ext.Web.dll,显示ext未定义的解决方法
- NetCore控制台实现自定义CommandLine功能
- 初涉网络流[EKdinic]
- django-rest-framework二--权限(转载)
- 直方图匹配的数学原理
- 凯恩帝绝对坐标清零_凯恩帝100T数控车床怎么把加工数量时间清零
- Java+Swing实现自助取款机(ATM)系统-TXT存储数据
- php实现五维雷达图,【数据可视化·图表篇】雷达图
- 用C语言将搜狗输入法词库转换成QQ拼音输入法词库
- Windows系统盘瘦身
- 8、C语言printf函数与scanf函数
- 阿里内部Redis宝典遭外泄极致经典:源码+实战+理论
- ubuntu18.04安装CUDA