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中for循环详解
Jan 17 Python
Python获取Windows或Linux主机名称通用函数分享
Nov 22 Python
Python中的getopt函数使用详解
Jul 28 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
Dec 12 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
May 24 Python
Python爬虫设置代理IP(图文)
Dec 23 Python
Python使用Pandas对csv文件进行数据处理的方法
Aug 01 Python
django 控制页面跳转的例子
Aug 06 Python
PYTHON EVAL的用法及注意事项解析
Sep 06 Python
PyTorch的SoftMax交叉熵损失和梯度用法
Jan 15 Python
python绘制趋势图的示例
Sep 17 Python
通过Python把学姐照片做成拼图游戏
Feb 15 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中break及continue两个流程控制指令区别分析
2011/04/18 PHP
php获取post中的json数据的实现方法
2011/06/08 PHP
PHP遍历数组的几种方法
2012/03/22 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
JavaScript中的this到底是什么(一)
2015/12/09 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
使用python调用zxing库生成二维码图片详解
2017/01/10 Python
python模拟登录并且保持cookie的方法详解
2017/04/04 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
阿里旅行:飞猪
2017/01/05 全球购物
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
Ado与Ado.net的相同与不同
2014/12/08 面试题
武汉高蓝德国际.net机试
2016/06/24 面试题
《红军不怕远征难》教学反思
2014/04/14 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书
详解Python自动化之文件自动化处理
2021/06/21 Python