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入门篇之条件、循环
Oct 17 Python
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
Apr 24 Python
Python及PyCharm下载与安装教程
Nov 18 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
Dec 20 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
Tensorflow 查看变量的值方法
Jun 14 Python
python递归函数绘制分形树的方法
Jun 22 Python
python使用thrift教程的方法示例
Mar 21 Python
python实现一个点绕另一个点旋转后的坐标
Dec 04 Python
通过Turtle库在Python中绘制一个鼠年福鼠
Feb 03 Python
python实现跨年表白神器--你值得拥有
Jan 04 Python
python3中apply函数和lambda函数的使用详解
Feb 28 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
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
php经典趣味算法实例代码
2020/01/21 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
2014/06/07 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
Javascript基础教程之数据类型转换
2015/01/18 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
深入理解JavaScript中的for循环
2017/02/07 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
在Python中使用next()方法操作文件的教程
2015/05/24 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
Python hmac模块使用实例解析
2019/12/24 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
Python中的整除和取模实例
2020/06/03 Python
解决pycharm中的run和debug失效无法点击运行
2020/06/09 Python
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
在家更换处方镜片:Lensabl
2019/05/01 全球购物
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
公司会议开幕词
2015/01/29 职场文书
餐厅收银员岗位职责
2015/04/07 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android
Java 定时任务技术趋势简介
2022/05/04 Java/Android