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版
Aug 12 Python
Python3单行定义多个变量或赋值方法
Jul 12 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
将Python字符串生成PDF的实例代码详解
May 17 Python
对python中基于tcp协议的通信(数据传输)实例讲解
Jul 22 Python
python 使用while写猜年龄小游戏过程解析
Oct 07 Python
关于Pytorch MaxUnpool2d中size操作方式
Jan 03 Python
django模板获取list中指定索引的值方式
May 14 Python
如何打包Python Web项目实现免安装一键启动的方法
May 21 Python
超级实用的8个Python列表技巧
Aug 24 Python
Python如何执行系统命令
Sep 23 Python
k-means & DBSCAN 总结
Apr 27 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 MemCached 高级缓存应用代码
2010/08/05 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
PHP+RabbitMQ实现消息队列的完整代码
2019/03/20 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
2019/10/11 PHP
将光标定位于输入框最右侧实现代码
2012/12/04 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
PHP PDO操作总结
2014/11/17 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
基于 Bootstrap Datetimepicker 联动
2017/08/03 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
python如何生成网页验证码
2018/07/28 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
巴西宠物商店:Cobasi
2019/04/19 全球购物
Bonprix法国:时尚、鞋子、家居
2020/12/29 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
创建索引时需要注意的事项
2013/05/13 面试题
internal修饰符起什么作用
2013/12/16 面试题
思想政治自我鉴定
2013/10/06 职场文书
文化宣传方案
2014/03/13 职场文书
三严三实学习心得体会
2014/10/13 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
实习单位指导教师评语
2014/12/30 职场文书
追悼会悼词大全
2015/06/23 职场文书
值班管理制度范本
2015/08/06 职场文书
治庸问责工作总结
2015/08/11 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书