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并发:多线程与多进程的详解
Jan 24 Python
python列表使用实现名字管理系统
Jan 30 Python
解决django中ModelForm多表单组合的问题
Jul 18 Python
python中bs4.BeautifulSoup的基本用法
Jul 27 Python
python3 深浅copy对比详解
Aug 12 Python
详解用python计算阶乘的几种方法
Aug 14 Python
python+opencv实现车牌定位功能(实例代码)
Dec 24 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
Jan 10 Python
PyCharm最新激活码(2020/10/27全网最新)
Oct 27 Python
python中的测试框架
Nov 13 Python
Python机器学习算法之决策树算法的实现与优缺点
May 13 Python
python中validators库的使用方法详解
Sep 23 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/04/22 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
PHP中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
基于Zend的Captcha机制的应用
2013/05/02 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
php 使用file_get_contents读取大文件的方法
2014/11/13 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
js常见表单应用技巧
2008/01/09 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
Python实现获取操作系统版本信息方法
2015/04/08 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
班组长的岗位职责
2013/12/09 职场文书
报效祖国演讲稿
2014/09/15 职场文书
师德师风学习材料
2014/12/19 职场文书
春秋淹城导游词
2015/02/11 职场文书
十月围城观后感
2015/06/08 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python