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 相关文章推荐
下载安装setuptool和pip linux安装pip    
Jan 24 Python
Python中使用logging模块代替print(logging简明指南)
Jul 09 Python
Python做简单的字符串匹配详解
Mar 21 Python
在python3环境下的Django中使用MySQL数据库的实例
Aug 29 Python
Python图形绘制操作之正弦曲线实现方法分析
Dec 25 Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 Python
python实现AES加密解密
Mar 28 Python
Scrapy项目实战之爬取某社区用户详情
Sep 17 Python
Python安装Bs4的多种方法
Nov 28 Python
Python time库的时间时钟处理
May 02 Python
Python 机器学习工具包SKlearn的安装与使用
May 14 Python
Python中22个万用公式的小结
Jul 21 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连接access数据库方法
2013/11/11 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
PHP解决高并发的优化方案实例
2020/12/10 PHP
JavaScript 乱码问题
2009/08/06 Javascript
jQuery入门知识简介
2010/03/04 Javascript
一个简单的js动画效果代码
2010/07/20 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
jQuery插件开发详细教程
2014/06/06 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
JS实现显示当前日期的实例代码
2018/07/03 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
2019/08/22 Javascript
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
详细介绍Python函数中的默认参数
2015/03/30 Python
Python读取properties配置文件操作示例
2018/03/29 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
2019/06/18 Python
Django权限控制的使用
2021/01/07 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
心理健康教育心得体会
2013/12/29 职场文书
家长会欢迎词
2015/01/23 职场文书
廉政承诺书2015
2015/04/28 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS