python利用rsa库做公钥解密的方法教程


Posted in Python onDecember 10, 2017

前言

对于RSA的解密,即密文的数字的 D 次方求mod N 即可,即密文和自己做 D 次乘法,再对结果除以 N 求余数即可得到明文。D 和 N 的组合就是私钥(private key)。

算法的加密和解密还是很简单的,可是公钥和私钥的生成算法却不是随意的。使用RSA公钥解密,用openssl命令就是openssl rsautl -verify -in cipher_text -inkey public.pem -pubin -out clear_text,但其python网上还真没有找到有博文去写,只有hash的rsa解签名。

这里使用rsa库,如果没有可以到官方网址https://pypi.python.org/pypi/rsa/3.1.4下载。

具体的安装方法大家可以参考这里:https://3water.com/article/70331.htm

想了想原理,然后到rsa库的python代码里找了找,从verify的代码里提取了出来,又试验了试验,一切OK了。

代码如下:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
#rsa
from rsa import PublicKey, common, transform, core
def f(cipher, PUBLIC_KEY):
 public_key = PublicKey.load_pkcs1(PUBLIC_KEY)
 encrypted = transform.bytes2int(cipher)
 decrypted = core.decrypt_int(encrypted, public_key.e, public_key.n)
 text = transform.int2bytes(decrypted) 
 if len(text) > 0 and text[0] == '\x01':
  pos = text.find('\x00')
  if pos > 0:
  return text[pos+1:]
  else:
  return None 
fn = sys.stdin.readline()[:-1]
public_key = sys.stdin.readline()[:-1]
x = f(open(fn).read(), open(public_key).read())
print x

用shell验证如下:

$ openssl genrsa -out pri2048.pem 2048
Generating RSA private key, 2048 bit long modulus
..+++
..............................................+++
e is 65537 (0x10001)
 $ openssl rsa -in pri2048.pem -out pub2048.pem -RSAPublicKey_out
writing RSA key
 $ echo -n 'Just a test' >1.txt
 $ openssl rsautl -sign -in 1.txt -inkey pri2048.pem -out 1.bin
 $ { echo 1.bin; echo pub2048.pem; } | ./test_rsa.py
Just a test

一切OK,注意,公钥pem从私钥里析出必须用-RSAPublicKey_out,这样pem文件的第一行和最后一行为以下,这样rsa.PublicKey.load_pkcs1才会认识。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
在Python中使用NLTK库实现对词干的提取的教程
Apr 08 Python
python 编程之twisted详解及简单实例
Jan 28 Python
Python使用base64模块进行二进制数据编码详解
Jan 11 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
Nov 21 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
django如何通过类视图使用装饰器
Jul 24 Python
Pycharm连接远程服务器并实现远程调试的实现
Aug 02 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
Python super()方法原理详解
Mar 31 Python
Python devel安装失败问题解决方案
Jun 09 Python
python​格式化字符串
Apr 20 Python
Python跨文件全局变量的实现方法示例
Dec 10 #Python
git进行版本控制心得详谈
Dec 10 #Python
Python内置模块turtle绘图详解
Dec 09 #Python
Python程序退出方式小结
Dec 09 #Python
Python实战小程序利用matplotlib模块画图代码分享
Dec 09 #Python
Python爬取附近餐馆信息代码示例
Dec 09 #Python
Python的地形三维可视化Matplotlib和gdal使用实例
Dec 09 #Python
You might like
笑谈配置,使用Smarty技术
2007/01/04 PHP
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
php中 $$str 中 "$$" 的详解
2015/07/06 PHP
php处理json格式数据经典案例总结
2016/05/19 PHP
功能强大的php文件上传类
2016/08/29 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
javascript 混合的构造函数和原型方式,动态原型方式
2009/12/07 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
使用PDB模式调试Python程序介绍
2015/04/05 Python
Python正则表达式使用经典实例
2016/06/21 Python
使用Python编写一个最基础的代码解释器的要点解析
2016/07/12 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
Django中使用Celery的教程详解
2018/08/24 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
python如何编写win程序
2020/06/08 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
高中体育教学反思
2014/01/24 职场文书
教师求职自荐书
2014/06/14 职场文书
中药学自荐信
2014/06/15 职场文书
六查六看剖析材料
2014/10/06 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
稽核岗位职责范本
2015/04/13 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
Python socket如何解析HTTP请求内容
2022/02/12 Python