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入门教程
Apr 03 Python
Python httplib模块使用实例
Apr 11 Python
使用Python脚本来获取Cisco设备信息的示例
May 04 Python
Python实现约瑟夫环问题的方法
May 03 Python
Python二叉搜索树与双向链表转换算法示例
Mar 02 Python
Python编写带选项的命令行程序方法
Aug 13 Python
python可视化实现KNN算法
Oct 16 Python
Python上下文管理器用法及实例解析
Nov 11 Python
Python中Flask-RESTful编写API接口(小白入门)
Dec 11 Python
如何使用python记录室友的抖音在线时间
Jun 29 Python
python使用bs4爬取boss直聘静态页面
Oct 10 Python
通过python-pptx模块操作ppt文件的方法
Dec 26 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数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
php 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
PHP数据过滤的方法
2013/10/30 PHP
jquery 元素相对定位代码
2010/10/15 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
js canvas实现适用于移动端的百分比仪表盘dashboard
2017/07/18 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
2017/08/17 jQuery
EasyUI实现下拉框多选功能
2017/11/07 Javascript
初探js和简单隐藏效果的实例
2017/11/23 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
vue实现未登录跳转到登录页面的方法
2018/07/17 Javascript
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
Python read函数按字节(字符)读取文件的实现
2019/07/03 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
华为C++笔试题
2014/08/05 面试题
两则小学生的自我评价分享
2013/11/14 职场文书
党员教师工作决心书
2014/03/13 职场文书
十佳少年事迹材料
2014/12/25 职场文书
爱国主义电影观后感
2015/06/18 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android