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内置函数Type()函数一个有趣的用法
Feb 18 Python
Python的Django框架中自定义模版标签的示例
Jul 20 Python
flask框架使用orm连接数据库的方法示例
Jul 16 Python
python 用下标截取字符串的实例
Dec 25 Python
python 产生token及token验证的方法
Dec 26 Python
python 定时任务去检测服务器端口是否通的实例
Jan 26 Python
python文件转为exe文件的方法及用法详解
Jul 08 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
python读取Kafka实例
Dec 23 Python
pyenv虚拟环境管理python多版本和软件库的方法
Dec 26 Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
Dec 31 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
基于empty函数的输出详解
2013/06/17 PHP
PHP模拟asp中response类实现方法
2015/08/08 PHP
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
JavaScript 变量作用域分析
2011/07/04 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
python使用wxpython开发简单记事本的方法
2015/05/20 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
python匿名函数用法实例分析
2019/08/03 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
你不知道的5个HTML5新功能
2016/06/28 HTML / CSS
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
联强国际笔试题面试题
2013/07/10 面试题
农药学硕士毕业生自荐信
2013/09/25 职场文书
留学自荐信
2013/10/10 职场文书
写给学生的新学期寄语
2014/01/18 职场文书
班主任工作经验交流材料
2014/05/13 职场文书
幼儿园教师考核评语
2014/12/31 职场文书
高中政治教师教学反思
2016/02/23 职场文书
CocosCreator入门教程之网络通信
2021/04/16 Javascript
python编写五子棋游戏
2021/05/25 Python