python2/python3数据加密
来源:互联网 发布:蓝月亮 荧光剂 知乎 编辑:程序博客网 时间:2024/06/07 08:30
python2
先说py2,因为个人习惯,一直都是用的py2。引入的模块是m2crypto,怎么引入我也写一下,当时因为这个问题,挣扎了许久!!
搜索M2Crypto
https://pypi.python.org/pypi/M2CryptoWin64/
下载安装
pip install --egg M2CryptoWin64
# coding:utf-8from M2Crypto import RSA, BIO, EVPdef sign_sha1(data): # 下面的这三行 我也不是很懂 待研究 m = EVP.MessageDigest("sha1") # 先计算散列值 m.update(data) digest = m.final() mb = None begin = '-----BEGIN PRIVATE KEY-----\n' end = '\n-----END PRIVATE KEY-----' # ++++++++++++++ 取常量 +++++++++++++++++++++ pri_key = "put your private_key here!!" # 私钥数据是一行,因为对格式有要求,将它分解为多行,每64个字符一行 pri_key = [pri_key[i:i + 64] for i in range(0, len(pri_key), 64)] # 以BIO的方式读入内存,如果以直接读取文件 或者 读字符串的方式 会有其他错误,暂时以此方法避免 mb = BIO.MemoryBuffer(begin + "\n".join(pri_key) + end) if mb: key = RSA.load_key_bio(mb) result = key.sign(digest, 'sha1') # 将加密的密文从base64解为str类型 return result.encode('base64') else: raise 'error'
python3
再说一下py3的背景:个人用py2同django做的页面提供给组员造数据用,然后另外一个同事将我的这个功能添加到另外一个数据平台内。问题是他的py是3版本。我的是用2写的,但是我引入的模块是m2crypto,这个模块在3是不支持的,需要用其他模块代替。下面是他改写后的代码:
from OpenSSL.crypto import load_privatekey, sign, FILETYPE_PEMimport base64def sign_sha1(data): begin = '-----BEGIN RSA PRIVATE KEY-----\n' end = '\n-----END RSA PRIVATE KEY-----' pri_key = "put your private_key here!!" pri_key = [pri_key[i:i + 64] for i in range(0, len(pri_key), 64)] s = begin + "\n".join(pri_key) + end private_key = load_privatekey(FILETYPE_PEM, s) r = sign(private_key, data, "sha1") r = base64.b64encode(r).decode() r = [r[i:i + 76] for i in range(0, len(r), 76)] return '\n'.join(r)
阅读全文
0 0
- python2/python3数据加密
- Python2 & Python3
- python3 与 python2区别
- python2.x ~ python3.x
- python2 python3语法区别
- python2/python3 name对照
- python2 和python3 共存
- python2 python3 部分区别
- 从python2到python3
- Python2.x vs Python3
- 学python2还是python3
- Python2还是Python3
- python2和python3注意事项
- Python2自动转Python3
- python2 和 python3比较
- Python3代码兼容Python2
- python2和python3共存
- Python2还是Python3?
- java string stringbuilder stringbuffer
- 技术主管一直做微服务 程序员不干了
- ROS机器人操作系统的安装、配置与初级教程 5
- LightOJ1125
- Android获取屏幕宽度的4种方法
- python2/python3数据加密
- android studio 没有错误、警告提示怎么办
- Spark
- 2017_07_05
- Kotlin学习笔记:静态方法
- android ViewPager不可滑动(android 项目心得四)
- Flask系列教程(4)——SQLAlchemy数据库
- BZOJ3676:[Apio2014]回文串 (Manacher+后缀自动机+树上倍增)
- Educational Codeforces Round 19 F(dp+队列优化)