python的rsa公钥解密方法
示例:
- # -*- coding: UTF- -*-
- import M2Crypto
- import base64
- #私钥加密,公钥解密
- def pri_encrypt(msg, file_name):
- rsa_pri = M2Crypto.RSA.load_key(file_name)
- ctxt_pri = rsa_pri.private_encrypt(msg, M2Crypto.RSA.pkcs1_padding) #这里的方法选择加密填充方式,所以在解密的时候 要对应。
- ctxt64_pri = base64.b64encode(ctxt_pri) #密文是base64 方便保存 encode成str
- print ('密文:%s'% ctxt64_pri)
- return ctxt64_pri
- def pub_decrypt_with_pubkeyfile(msg, file_name):
- rsa_pub = M2Crypto.RSA.load_pub_key(file_name)
- pub_decrypt(msg, rsa_pub)
- def pub_decrypt_with_pubkeystr(msg, pub_key):
- #将pub_key转成bio对象,再将bio对象转换成公钥对象
- bio = M2Crypto.BIO.MemoryBuffer(pub_key)
- rsa_pub = M2Crypto.RSA.load_pub_key_bio(bio)
- pub_decrypt(msg, rsa_pub)
- def pub_decrypt(msg, rsa_pub):
- ctxt_pri = base64.b64decode(msg) # 先将str转成base64
- maxlength =
- output = ''
- while ctxt_pri:
- input = ctxt_pri[:maxlength]
- ctxt_pri = ctxt_pri[maxlength:]
- out = rsa_pub.public_decrypt(input, M2Crypto.RSA.pkcs1_padding) #解密
- output = output + out
- print('明文:%s'% output)
- if __name__ == "__main__":
- prikey_file = './rsa/rsa_private_key.pem'
- pubkey_file = './rsa/rsa_public_key.pem'
- msg = 'Test String.'
- primsg = pri_encrypt(msg, prikey_file)
- pub_decrypt(primsg, pubkey_file)
公钥信息,要有开头和结尾信息:
- pkey_str = '''-----BEGIN PUBLIC KEY-----
- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2kcrRvxURhFijDoPpqZ/IgPlA
- gppkKrek6wSrua1zBiGTwHI2f+YCa5vC1JEiIi9uw4srS0OSCB6kY3bP2DGJagBo
- Egj/rYAGjtYJxJrEiTxVs5/GfPuQBYmU0XAtPXFzciZy446VPJLHMPnmTALmIOR5
- Dddd1Zklod9IQBMjjwIDAQAB
- -----END PUBLIC KEY-----'''
python base64 decode incorrect padding错误解决方法
- 个人觉得原因应该是不同的语言/base64库编码规则不太统一的问题。
- python中base64串的长度需为4的整数倍,故对长度不为4整数倍的base64串需要用"='补足
- 如下代码:
- data为base64编码字符串,经过补齐后的data即可被python base64解码
missing_padding = - len(data) %- if missing_padding:
- data += b'=' * missing_pad ding
base64.b64decode(data))
其实一般使用场景是,私钥签名,公钥验证:
https://www.cnblogs.com/hhh5460/p/5243410.html
- #!/usr/bin/env python
- # -*- coding: utf- -*-
- """
- @Author : xxx
- @Date : -- :
- @Description : 本文件的作用描述
- @File : login_with_janus.py
- """
- import M2Crypto
- import base64
- import os
- import logging
- import json
- logger = logging.getLogger('operation')
- current_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
- pub_key_file = os.path.abspath(os.path.join(current_path, "utils", "jar_file", "janus.pub"))
- def decrypt_by_default_public_key(token):
- # 补齐padding,这是因为java加密的长度和python加密的长度不一致
- missing_padding = - len(token) %
- if missing_padding:
- token += '=' * missing_padding
- token = token.replace(" ", "+")
- rsa_pub = M2Crypto.RSA.load_pub_key(pub_key_file)
- # 先进行base64解码
- logging.info(len(token))
- cipher = base64.b64decode(token)
- maxlength =
- output = ''
- while cipher:
- _input = cipher[:maxlength]
- cipher = cipher[maxlength:]
- out = rsa_pub.public_decrypt(_input, M2Crypto.RSA.pkcs1_padding) # 解密
- output = output + out.decode()
- user_info = json.loads(output)
- 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公钥解密方法的更多相关文章
- python实现RSA加密解密方法
python3.5 安装pip 安装rsa python -m pip install rsa 我们可以生成RSA公钥和密钥,也可以load一个.pem文件进来 # -*- coding: utf-8 ...
- python下RSA加密解密以及跨平台问题
Reference: http://www.cnblogs.com/luchanghong/archive/2012/07/18/2596886.html 项目合作需要,和其他网站通信,消息内容采用 ...
- python实现RSA加解密
# coding=utf-8 """ @author:Eleven created on:2018年10月30日 """ import bi ...
- Python下RSA加密/解密, 签名/验证
原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() import rsa # 生成密钥 (pubkey, privkey) = rsa.newkeys(1 ...
- python下RSA 加密/解密,签名/验证
基于win7 + python3.4 原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() import rsa # 生成密钥 (pubkey, privk ...
- python使用rsa库做公钥解密(网上别处找不到)
使用RSA公钥解密,用openssl命令就是openssl rsautl -verify -in cipher_text -inkey public.pem -pubin -out clear_tex ...
- python实现RSA加密和签名以及分段加解密的方案
1.前言 很多朋友在工作中,会遇到一些接口使用RSA加密和签名来处理的请求参数,那么遇到这个问题的时候,第一时间当然是找开发要加解密的方法,但是开发给加解密代码,大多数情况都是java,c++,js等 ...
- python RSA加密解密及模拟登录cnblog
1.公开密钥加密 又称非对称加密,需要一对密钥,一个是私人密钥,另一个则是公开密钥.公钥加密的只能私钥解密,用于加密客户上传数据.私钥加密的数据,公钥可以解密,主要用于数字签名.详细介绍可参见维基百科 ...
- javascript的rsa加密和python的rsa解密
先说下目前测试情况:javascript加密后的数据,python无法完成解密,我估计是两者的加密解密方法不同 1.看了这篇文章:http://blog.nsfocus.net/python-js-e ...
随机推荐
- SET操作符
一:MySQL交集INTERSECT运算符 1.介绍 INTERSECT运算符是一个集合运算符,它只返回两个查询或更多查询的交集. 语法: INTERSECT运算符比较两个查询的结果,并返回由左和右查 ...
- 007 jquery过滤选择器-----------(屬性过滤选择器)
1.介紹 2.程序 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- 关于 Google 与 Chrome
不断更新... 查看chrome版本 chrome浏览器中输入 chrome://version/ Chrome吧 :http://tieba.baidu.com/f?kw=chrome&i ...
- Windows下PHP多线程扩展pthreads的安装
pthreads扩展安装步骤 1.查看phpinfo() 获取PHP版本号及位数(x86表示32位,x64表示64位).编译器版本.PHP配置文件加载所在位置等.如下图所示: 2.pthreads扩展 ...
- 022.Zabbix自定义(邮箱)脚本告警01
待补充 有需要,请留言!
- 【python学习-2】python起步必备
1.python缩进 python 缩进是tab,还是空格呢?都可以,可以是一个tab,也可以是4个空格,但是最重要的是整个python脚本的缩进必须统一,否则会报错. 2.代码注释 python注释 ...
- Windows栈溢出原理
1.栈是什么? 栈是一种运算受限的线性表 其限制是仅允许在表的一端进行插入和删除运算 这一端称为栈顶(TOP),相对的另一端称为栈底(BASE) 向一个栈插入新元素,称作进栈.入栈或压栈(PUSH) ...
- Redis客户端连接以及持久化数据(三)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- web实践小项目<一>:简单日程管理系统(涉及html/css,javascript,python,sql,日期处理)
暑假自学了些html/css,javascript和python,苦于学完无处练手几乎过目即忘...最后在同学的建议下做了个简单日程管理系统.借第一版完成之际,希望能将实践期间犯过的错误和获得的新知进 ...
- 再谈JavaScript中的闭包
一.什么是闭包 闭包就是有权访问另一个函数作用域中变量的函数,因此,闭包的本质是一个函数.当一个内部函数被保存到外部时,就会生成闭包. 二.闭包的作用 1.实现公有变量,即通过局部变量实现全局变量的效 ...