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中常用的各种数据库操作模块和连接实例
May 29 Python
Python常用的爬虫技巧总结
Mar 28 Python
python 实时遍历日志文件
Apr 12 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
Python编程中NotImplementedError的使用方法
Apr 21 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
Python实现K折交叉验证法的方法步骤
Jul 11 Python
Pytorch卷积层手动初始化权值的实例
Aug 17 Python
详解Python 字符串相似性的几种度量方法
Aug 29 Python
python绘制规则网络图形实例
Dec 09 Python
Pycharm中切换pytorch的环境和配置的教程详解
Mar 13 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图片验证码代码
2008/03/27 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
javascript单例模式的简单实现方法
2015/07/25 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
JavaScript中的定时器之Item23的合理使用
2015/10/30 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
python静态方法实例
2015/01/14 Python
python定时器(Timer)用法简单实例
2015/06/04 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
浅谈python之新式类
2018/08/12 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
如何使用Python进行OCR识别图片中的文字
2019/04/01 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
酒吧总经理岗位职责
2013/12/10 职场文书
周年庆典邀请函范文
2014/01/24 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
文明礼仪主题班会
2015/08/13 职场文书
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python
CPU不支持Windows11系统怎么办
2021/11/21 数码科技