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实现将xml导入至excel
Nov 20 Python
python线程池threadpool实现篇
Apr 27 Python
python write无法写入文件的解决方法
Jan 23 Python
Python实现对特定列表进行从小到大排序操作示例
Feb 11 Python
Python基础学习之时间转换函数用法详解
Jun 18 Python
python 实现识别图片上的数字
Jul 30 Python
python os.fork() 循环输出方法
Aug 08 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
Aug 17 Python
基于python调用psutil模块过程解析
Dec 20 Python
TensorFlow 读取CSV数据的实例
Feb 05 Python
彻底搞懂python 迭代器和生成器
Sep 07 Python
python dir函数快速掌握用法技巧
Dec 09 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
php4的session功能评述(一)
2006/10/09 PHP
smarty的保留变量问题
2008/10/23 PHP
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
2012/07/31 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
jquery multiSelect 多选下拉框
2010/07/09 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
解决canvas画布使用fillRect()时高度出现双倍效果的问题
2017/08/03 Javascript
前端常见跨域解决方案(全)
2017/09/19 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
跟老齐学Python之集合的关系
2014/09/24 Python
Python中的zip函数使用示例
2015/01/29 Python
python执行外部程序的常用方法小结
2015/03/21 Python
Python探索之pLSA实现代码
2017/10/25 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
Python语言快速上手学习方法
2018/12/14 Python
wxPython色环电阻计算器
2019/11/18 Python
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
销售人员职业生涯规划范文
2014/03/01 职场文书
低碳生活倡议书
2014/04/14 职场文书
创文明城市标语
2014/06/16 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server