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最长公共子串算法实例
Mar 07 Python
Python中类型检查的详细介绍
Feb 13 Python
Django 生成登陆验证码代码分享
Dec 12 Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 Python
python mysql断开重连的实现方法
Jul 26 Python
利用python-docx模块写批量生日邀请函
Aug 26 Python
Python3批量移动指定文件到指定文件夹方法示例
Sep 02 Python
Django自定义全局403、404、500错误页面的示例代码
Mar 08 Python
Jmeter调用Python脚本实现参数互相传递的实现
Jan 22 Python
你喜欢篮球吗?Python实现篮球游戏
Jun 11 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 Python
python热力图实现的完整实例
Jun 25 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学习之变量的使用
2011/05/29 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
2013/02/02 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
jQuery+css3实现转动的正方形效果(附demo源码下载)
2016/01/27 Javascript
谈一谈js中的执行环境及作用域
2016/03/30 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能
2018/04/28 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
2018/10/29 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
selenium + python 获取table数据的示例讲解
2018/10/13 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
急诊科护士自我鉴定
2013/10/14 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
水利学院求职自荐书
2014/02/01 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
环保倡议书格式范文
2014/05/14 职场文书
煤矿安全承诺书
2014/05/22 职场文书
超市员工辞职信范文
2015/05/12 职场文书
OpenCV-Python实现轮廓拟合
2021/06/08 Python
Golang获取List列表元素的四种方式
2022/04/20 Golang
nginx rewrite功能使用场景分析
2022/05/30 Servers