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 sys模块sys.path使用方法示例
Dec 04 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
python程序控制NAO机器人行走
Apr 29 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
python多线程实现TCP服务端
Sep 03 Python
原生python实现knn分类算法
Oct 24 Python
python基于三阶贝塞尔曲线的数据平滑算法
Dec 27 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
基于pycharm实现批量修改变量名
Jun 02 Python
总结Python常用的魔法方法
May 25 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 Python
详解Python描述符的工作原理
Jun 11 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跨域cookie共享使用方法
2014/02/20 PHP
php汉字转拼音的示例
2014/02/27 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
python函数参数*args**kwargs用法实例
2013/12/04 Python
Python学习思维导图(必看篇)
2017/06/26 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
Django Xadmin多对多字段过滤实例
2020/04/07 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
html5指南-1.html5全局属性(html5 global attributes)深入理解
2013/01/07 HTML / CSS
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
师范毕业生求职自荐信
2013/09/25 职场文书
土木工程个人自荐信范文
2013/11/30 职场文书
环保公益广告语
2014/03/13 职场文书
介绍信样本
2015/01/31 职场文书
美丽的大脚观后感
2015/06/03 职场文书
销售会议开幕词
2016/03/04 职场文书
python3 hdf5文件 遍历代码
2021/05/19 Python
pd.DataFrame中的几种索引变换的实现
2022/06/16 Python