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 相关文章推荐
用smtplib和email封装python发送邮件模块类分享
Feb 17 Python
python实现从字典中删除元素的方法
May 04 Python
Python自动发邮件脚本
Mar 31 Python
Python3中类、模块、错误与异常、文件的简易教程
Nov 20 Python
浅析python的优势和不足之处
Nov 20 Python
python实现桌面壁纸切换功能
Jan 21 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
Oct 14 Python
Python爬虫解析网页的4种方式实例及原理解析
Dec 30 Python
python入门之井字棋小游戏
Mar 05 Python
Python多线程正确用法实例解析
May 30 Python
Python道路车道线检测的实现
Jun 27 Python
opencv检测动态物体的实现
Jul 21 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
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
php实现网页端验证码功能
2017/07/11 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
详解vue-router和vue-cli以及组件之间的传值
2017/07/04 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
详解基于 Node.js 的轻量级云函数功能实现
2019/07/08 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
Python如何实现文本转语音
2016/08/08 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
Python3中的最大整数和最大浮点数实例
2019/07/09 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
2020/11/20 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
阿里巴巴美国:Alibaba美国
2019/11/24 全球购物
大学生找工作求职信
2014/07/09 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
人生一定要学会的三样东西:放下、忘记、珍惜
2019/08/21 职场文书
话题作文之成长
2019/12/09 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
python数字类型和占位符详情
2022/03/13 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
2022/05/30 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python