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 相关文章推荐
python3实现暴力穷举博客园密码
Jun 19 Python
python实现将读入的多维list转为一维list的方法
Jun 28 Python
python框架中flask知识点总结
Aug 17 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
Jun 24 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
基于python二叉树的构造和打印例子
Aug 09 Python
浅析matlab中imadjust函数
Feb 27 Python
Keras自定义IOU方式
Jun 10 Python
如何利用Python动态模拟太阳系运转
Sep 04 Python
Python实现PS滤镜中的USM锐化效果
Dec 04 Python
Python基础之字符串格式化详解
Apr 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
实现树状结构的两种方法
2006/10/09 PHP
php+mysql数据库查询实例
2015/01/21 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
vue实现文件上传读取及下载功能
2020/11/17 Javascript
Vue数字输入框组件使用方法详解
2020/02/10 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python hook监听事件详解
2018/10/25 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
简单说下OSPF的操作过程
2014/08/13 面试题
预备党员思想汇报范文
2014/01/11 职场文书
党员教师工作决心书
2014/03/13 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
python超详细实现完整学生成绩管理系统
2022/03/17 Python
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android