示例:

  1. # -*- coding: UTF- -*-
  2. import M2Crypto
  3. import base64
  4. #私钥加密,公钥解密
  5. def pri_encrypt(msg, file_name):
  6. rsa_pri = M2Crypto.RSA.load_key(file_name)
  7. ctxt_pri = rsa_pri.private_encrypt(msg, M2Crypto.RSA.pkcs1_padding) #这里的方法选择加密填充方式,所以在解密的时候 要对应。
  8. ctxt64_pri = base64.b64encode(ctxt_pri) #密文是base64 方便保存 encode成str
  9. print ('密文:%s'% ctxt64_pri)
  10. return ctxt64_pri
  11. def pub_decrypt_with_pubkeyfile(msg, file_name):
  12. rsa_pub = M2Crypto.RSA.load_pub_key(file_name)
  13. pub_decrypt(msg, rsa_pub)
  14. def pub_decrypt_with_pubkeystr(msg, pub_key):
  15. #将pub_key转成bio对象,再将bio对象转换成公钥对象
  16. bio = M2Crypto.BIO.MemoryBuffer(pub_key)
  17. rsa_pub = M2Crypto.RSA.load_pub_key_bio(bio)
  18. pub_decrypt(msg, rsa_pub)
  19. def pub_decrypt(msg, rsa_pub):
  20. ctxt_pri = base64.b64decode(msg) # 先将str转成base64
  21. maxlength =
  22. output = ''
  23. while ctxt_pri:
  24. input = ctxt_pri[:maxlength]
  25. ctxt_pri = ctxt_pri[maxlength:]
  26. out = rsa_pub.public_decrypt(input, M2Crypto.RSA.pkcs1_padding) #解密
  27. output = output + out
  28. print('明文:%s'% output)
  29. if __name__ == "__main__":
  30. prikey_file = './rsa/rsa_private_key.pem'
  31. pubkey_file = './rsa/rsa_public_key.pem'
  32. msg = 'Test String.'
  33. primsg = pri_encrypt(msg, prikey_file)
  34. pub_decrypt(primsg, pubkey_file)

公钥信息,要有开头和结尾信息:

  1. pkey_str = '''-----BEGIN PUBLIC KEY-----
  2. MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2kcrRvxURhFijDoPpqZ/IgPlA
  3. gppkKrek6wSrua1zBiGTwHI2f+YCa5vC1JEiIi9uw4srS0OSCB6kY3bP2DGJagBo
  4. Egj/rYAGjtYJxJrEiTxVs5/GfPuQBYmU0XAtPXFzciZy446VPJLHMPnmTALmIOR5
  5. Dddd1Zklod9IQBMjjwIDAQAB
  6. -----END PUBLIC KEY-----'''

python base64 decode incorrect padding错误解决方法

  1. 个人觉得原因应该是不同的语言/base64库编码规则不太统一的问题。
  2. pythonbase64串的长度需为4的整数倍,故对长度不为4整数倍的base64串需要用"='补足
  3.  
  4. 如下代码:
  5. data为base64编码字符串,经过补齐后的data即可被python base64解码

  6. missing_padding = - len(data) %
  7. if missing_padding:
  8. data += b'=' * missing_pad ding
      base64.b64decode(data))

其实一般使用场景是,私钥签名,公钥验证:

https://www.cnblogs.com/hhh5460/p/5243410.html

  1. #!/usr/bin/env python
  2. # -*- coding: utf- -*-
  3. """
  4. @Author : xxx
  5. @Date : -- :
  6. @Description : 本文件的作用描述
  7. @File : login_with_janus.py
  8. """
  9.  
  10. import M2Crypto
  11. import base64
  12. import os
  13. import logging
  14. import json
  15.  
  16. logger = logging.getLogger('operation')
  17.  
  18. current_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  19. pub_key_file = os.path.abspath(os.path.join(current_path, "utils", "jar_file", "janus.pub"))
  20.  
  21. def decrypt_by_default_public_key(token):
  22. # 补齐padding,这是因为java加密的长度和python加密的长度不一致
  23. missing_padding = - len(token) %
  24. if missing_padding:
  25. token += '=' * missing_padding
  26. token = token.replace(" ", "+")
  27. rsa_pub = M2Crypto.RSA.load_pub_key(pub_key_file)
  28. # 先进行base64解码
  29. logging.info(len(token))
  30. cipher = base64.b64decode(token)
  31. maxlength =
  32. output = ''
  33. while cipher:
  34. _input = cipher[:maxlength]
  35. cipher = cipher[maxlength:]
  36. out = rsa_pub.public_decrypt(_input, M2Crypto.RSA.pkcs1_padding) # 解密
  37. output = output + out.decode()
  38. user_info = json.loads(output)
  39. return user_info

这篇文章:https://cloud.tencent.com/developer/article/1039467,没有尝试走通

参考:

https://blog.csdn.net/nyist327/article/details/48496595

https://www.cnblogs.com/yaks/p/6890625.html

python的rsa公钥解密方法的更多相关文章

  1. python实现RSA加密解密方法

    python3.5 安装pip 安装rsa python -m pip install rsa 我们可以生成RSA公钥和密钥,也可以load一个.pem文件进来 # -*- coding: utf-8 ...

  2. python下RSA加密解密以及跨平台问题

    Reference:  http://www.cnblogs.com/luchanghong/archive/2012/07/18/2596886.html 项目合作需要,和其他网站通信,消息内容采用 ...

  3. python实现RSA加解密

    # coding=utf-8 """ @author:Eleven created on:2018年10月30日 """ import bi ...

  4. Python下RSA加密/解密, 签名/验证

    原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() import rsa # 生成密钥 (pubkey, privkey) = rsa.newkeys(1 ...

  5. python下RSA 加密/解密,签名/验证

    基于win7 + python3.4 原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() import rsa # 生成密钥 (pubkey, privk ...

  6. python使用rsa库做公钥解密(网上别处找不到)

    使用RSA公钥解密,用openssl命令就是openssl rsautl -verify -in cipher_text -inkey public.pem -pubin -out clear_tex ...

  7. python实现RSA加密和签名以及分段加解密的方案

    1.前言 很多朋友在工作中,会遇到一些接口使用RSA加密和签名来处理的请求参数,那么遇到这个问题的时候,第一时间当然是找开发要加解密的方法,但是开发给加解密代码,大多数情况都是java,c++,js等 ...

  8. python RSA加密解密及模拟登录cnblog

    1.公开密钥加密 又称非对称加密,需要一对密钥,一个是私人密钥,另一个则是公开密钥.公钥加密的只能私钥解密,用于加密客户上传数据.私钥加密的数据,公钥可以解密,主要用于数字签名.详细介绍可参见维基百科 ...

  9. javascript的rsa加密和python的rsa解密

    先说下目前测试情况:javascript加密后的数据,python无法完成解密,我估计是两者的加密解密方法不同 1.看了这篇文章:http://blog.nsfocus.net/python-js-e ...

随机推荐

  1. SET操作符

    一:MySQL交集INTERSECT运算符 1.介绍 INTERSECT运算符是一个集合运算符,它只返回两个查询或更多查询的交集. 语法: INTERSECT运算符比较两个查询的结果,并返回由左和右查 ...

  2. 007 jquery过滤选择器-----------(屬性过滤选择器)

    1.介紹 2.程序 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  3. 关于 Google 与 Chrome

    不断更新... 查看chrome版本 chrome浏览器中输入  chrome://version/ Chrome吧 :http://tieba.baidu.com/f?kw=chrome&i ...

  4. Windows下PHP多线程扩展pthreads的安装

    pthreads扩展安装步骤 1.查看phpinfo() 获取PHP版本号及位数(x86表示32位,x64表示64位).编译器版本.PHP配置文件加载所在位置等.如下图所示: 2.pthreads扩展 ...

  5. 022.Zabbix自定义(邮箱)脚本告警01

    待补充 有需要,请留言!

  6. 【python学习-2】python起步必备

    1.python缩进 python 缩进是tab,还是空格呢?都可以,可以是一个tab,也可以是4个空格,但是最重要的是整个python脚本的缩进必须统一,否则会报错. 2.代码注释 python注释 ...

  7. Windows栈溢出原理

    1.栈是什么? 栈是一种运算受限的线性表 其限制是仅允许在表的一端进行插入和删除运算 这一端称为栈顶(TOP),相对的另一端称为栈底(BASE) 向一个栈插入新元素,称作进栈.入栈或压栈(PUSH) ...

  8. Redis客户端连接以及持久化数据(三)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  9. web实践小项目<一>:简单日程管理系统(涉及html/css,javascript,python,sql,日期处理)

    暑假自学了些html/css,javascript和python,苦于学完无处练手几乎过目即忘...最后在同学的建议下做了个简单日程管理系统.借第一版完成之际,希望能将实践期间犯过的错误和获得的新知进 ...

  10. 再谈JavaScript中的闭包

    一.什么是闭包 闭包就是有权访问另一个函数作用域中变量的函数,因此,闭包的本质是一个函数.当一个内部函数被保存到外部时,就会生成闭包. 二.闭包的作用 1.实现公有变量,即通过局部变量实现全局变量的效 ...