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发布模块的步骤分享
Feb 21 Python
python检查指定文件是否存在的方法
Jul 06 Python
用Python实现随机森林算法的示例
Aug 24 Python
python机器学习之神经网络(一)
Dec 20 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
Jan 09 Python
Python3多线程操作简单示例
May 22 Python
Django 自定义分页器的实现代码
Nov 24 Python
python隐藏类中属性的3种实现方法
Dec 19 Python
Python使用uuid库生成唯一标识ID
Feb 12 Python
Python 可视化神器Plotly详解
Dec 26 Python
python中pdb模块实例用法
Jan 15 Python
Python批量解压&压缩文件夹的示例代码
Apr 04 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
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
jquery简单体验
2007/01/10 Javascript
JavaScript对象模型-执行模型
2008/04/28 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
如何判断Javascript对象是否存在的简单实例
2016/05/18 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
Javascript创建类和对象详解
2017/05/31 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
Python 网页解析HTMLParse的实例详解
2017/08/10 Python
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
进程的查看和调度分别使用什么命令
2015/03/25 面试题
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
优秀干部获奖感言
2014/01/31 职场文书
司马光教学反思
2014/02/01 职场文书
工程管理英文求职信
2014/03/18 职场文书
运动会演讲稿200字
2014/08/25 职场文书
技术入股合作协议书
2016/03/21 职场文书
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸