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利用elaphe制作二维条形码实现代码
May 25 Python
python实现DNS正向查询、反向查询的例子
Apr 25 Python
Python获取Windows或Linux主机名称通用函数分享
Nov 22 Python
python实现对一个完整url进行分割的方法
Apr 29 Python
Python制作简易注册登录系统
Dec 15 Python
python2.7 mayavi 安装图文教程(推荐)
Jun 22 Python
Python语言实现百度语音识别API的使用实例
Dec 13 Python
python实现内存监控系统
Mar 07 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
Mar 05 Python
python 将列表里的字典元素合并为一个字典实例
Sep 01 Python
Python 串口通信的实现
Sep 29 Python
Python self用法详解
Nov 28 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
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
PHILIPS AE3805收音机的分析打磨
2021/03/02 无线电
php adodb连接mssql解决乱码问题
2009/06/12 PHP
php function用法如何递归及return和echo区别
2014/03/07 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
JQuery小知识
2010/10/15 Javascript
JS在textarea光标处插入文本的小例子
2013/03/22 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
2017/06/28 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
2019/04/22 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
python实现彩色图转换成灰度图
2019/01/15 Python
python中对数据进行各种排序的方法
2019/07/02 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
HTML5学习笔记之History API
2015/02/26 HTML / CSS
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
应届生自荐信范文
2014/02/21 职场文书
暑期培训随笔感言
2014/03/10 职场文书
化工操作工岗位职责
2014/04/29 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis