python rsa实现数据加密和解密、签名加密和验签功能


Posted in Python onSeptember 18, 2019

本篇文章主要说明python库rsa生成密钥对,数据的加密解密,api接口的签名和验签,如有抄袭,请留言联系我。

先安装

pip install rsa

安装好后,请看代码

"""
注意:
api签名时:签名用私钥,验签用公钥
数据加密时:加密用公钥,解密用私钥
密钥和公钥保存的图片会在下边展示出来
"""
import rsa
# 对api的签名机制进行验证:签名用私钥,验签用公钥
class RsaEncrypt:
  def __init__(self, sign_str):
    self.sign_str = sign_str
  def rsa_generate(self):
    """
    生成私钥和公钥并保存
    :return:
    """
    # 生成公钥和私钥
    pubkey, privkey = rsa.newkeys(1024)
    pub = pubkey.save_pkcs1()
    # 公钥
    with open('public.pem', 'wb') as w_pub:
      w_pub.write(pub)
    # 私钥
    pri = privkey.save_pkcs1()
    with open('private.pem', 'wb') as w_pri:
      w_pri.write(pri)
    return "保存成功"
  @classmethod
  def read_rsa(self):
    """
    读取公钥和私钥
    :return:
    """
    with open('public.pem', 'rb') as publickfile:
      pub = publickfile.read()
      pubkey = rsa.PublicKey.load_pkcs1(pub)
    with open('private.pem', 'rb') as privatefile:
      priv = privatefile.read()
      # print(pub)
      privkey = rsa.PrivateKey.load_pkcs1(priv)
    return pubkey, privkey
  def str_sign(self):
    privkey = self.read_rsa()[1]
    # 先将要加密的数据转成二进制
    str_encode = self.sign_str.encode()
    # 用私钥进行加密,并设置加密算法
    signature = rsa.sign(str_encode, privkey, 'SHA-1') # 签名加密算法可以更换比如:SHA-256
    # print(signature)
    return signature
  def sign_verify(self, signature):
    """
    验证签名是否正确,如果正确,则返回签名算法,否则返回验证失败
    :param signature:
    :return:
    """
    pubkey = self.read_rsa()[0]
    try:
      agl = rsa.verify(self.sign_str.encode(), signature, pubkey)
      # print(type(agl))
      print(agl) # 返回加密算法代表验签成功
      return True
    except rsa.VerificationError:
      print("验证失败")
      return False

# 对数据进行加密:加密用公钥,解密用私钥
class DataEncrypt:
  def __init__(self, data_str):
    self.data_str = data_str
    self.secret_key = RsaEncrypt.read_rsa()# 调用RsaEncrypt类的读取密钥对方法
  def data_encrypt(self):
    """
    用公钥对数据进行加密
    :return:
    """
    str_encrypt = rsa.encrypt(self.data_str.encode(), self.secret_key[0])
    print(str_encrypt) # 加密后看着像二进制,但有不太像,看不懂
    return str_encrypt
  def data_decrypt(self, encrypt):
    str = rsa.decrypt(encrypt, self.secret_key[1]).decode()
    print(str) # 返回加密前的数据
    return str
if __name__ == '__main__':
 # 验证签名机制
  sing_test = RsaEncrypt('dfad--fa/d.s$$$&{}()><?L::>')
  sing_test.sign_verify(sing_test.str_sign())
 # 验证加密解密机制
  data = DataEncrypt('dfad--fa/d.s$$$&{}()><?L::>')
  data.data_decrypt(data.data_encrypt())

保存的公钥图片

python rsa实现数据加密和解密、签名加密和验签功能

私钥图片:

python rsa实现数据加密和解密、签名加密和验签功能

总结

以上所述是小编给大家介绍的python rsa实现数据加密和解密、签名加密和验签功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python之wxPython菜单使用详解
Sep 28 Python
Python检测生僻字的实现方法
Oct 23 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
简单谈谈python基本数据类型
Sep 26 Python
uwsgi+nginx部署Django项目操作示例
Dec 04 Python
python处理两种分隔符的数据集方法
Dec 12 Python
python pandas写入excel文件的方法示例
Jun 25 Python
python面试题之列表声明实例分析
Jul 08 Python
如何使用python操作vmware
Jul 27 Python
浅谈Python协程
Jun 17 Python
python性能测试工具locust的使用
Dec 28 Python
python使用pygame创建精灵Sprite
Apr 06 Python
决策树剪枝算法的python实现方法详解
Sep 18 #Python
python生成requirements.txt的两种方法
Sep 18 #Python
python2与python3爬虫中get与post对比解析
Sep 18 #Python
python中class的定义及使用教程
Sep 18 #Python
django创建超级用户过程解析
Sep 18 #Python
python实现网站微信登录的示例代码
Sep 18 #Python
简单了解python中的与或非运算
Sep 18 #Python
You might like
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
PHP脚本数据库功能详解(上)
2006/10/09 PHP
php 获取SWF动画截图示例代码
2014/02/10 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
PHP实现简易blog的制作
2016/10/24 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
js数组操作学习总结
2013/11/04 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
2015/06/25 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
vue.js开发环境安装教程
2017/03/17 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
2020/07/09 Javascript
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
2013/12/04 Python
在Python中使用__slots__方法的详细教程
2015/04/28 Python
Python使用pymysql小技巧
2017/06/04 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
Python3使用PySynth制作音乐的方法
2019/09/09 Python
python 实现方阵的对角线遍历示例
2019/11/29 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
Python接收手机短信的代码整理
2020/08/02 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
机关保密承诺书
2014/06/03 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
捐资助学感谢信
2015/01/21 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
公司管理制度范本
2015/08/03 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
MySQL8.0.18配置多主一从
2021/06/21 MySQL