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 相关文章推荐
django模型中的字段和model名显示为中文小技巧分享
Nov 18 Python
使用Python脚本来获取Cisco设备信息的示例
May 04 Python
python协程用法实例分析
Jun 04 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
May 25 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
Centos 升级到python3后pip 无法使用的解决方法
Jun 12 Python
python生成密码字典的方法
Jul 06 Python
Python实现端口检测的方法
Jul 24 Python
Python标准库shutil用法实例详解
Aug 13 Python
Python for循环搭配else常见问题解决
Feb 11 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
图神经网络GNN算法
May 11 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
电脑硬件及电脑配置知识大全
2020/03/17 数码科技
PHP 类相关函数的使用详解
2013/05/10 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
jquery如何改变html标签的样式(两种实现方法)
2013/01/16 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
高性能JavaScript模板引擎实现原理详解
2015/02/05 Javascript
两种JS实现屏蔽鼠标右键的方法
2020/08/20 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
JavaScript canvas绘制圆弧与圆形
2020/02/18 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
python去掉字符串中重复字符的方法
2014/02/27 Python
python socket 超时设置 errno 10054
2014/07/01 Python
Python制作爬虫采集小说
2015/10/25 Python
python实现二分查找算法
2017/09/21 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
python 如何调用 dubbo 接口
2020/09/24 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
使用CSS3制作版头动画效果
2020/12/24 HTML / CSS
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
促销活动策划方案
2014/01/12 职场文书
大学生旷课检讨书
2014/01/22 职场文书
元旦获奖感言
2014/03/08 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript