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面向对象编程的知识点总结
Feb 14 Python
JSON Web Tokens的实现原理
Apr 02 Python
OpenCV实现人脸识别
Apr 07 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
Jul 06 Python
python中数据爬虫requests库使用方法详解
Feb 11 Python
kafka-python批量发送数据的实例
Dec 27 Python
Pycharm远程调试原理及具体配置详解
Aug 08 Python
Python threading的使用方法解析
Aug 28 Python
浅析python 动态库m.so.1.0错误问题
May 09 Python
python中的django是做什么的
Jul 31 Python
scrapy结合selenium解析动态页面的实现
Sep 28 Python
Python基础之常用库常用方法整理
Apr 30 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中处理模拟rewrite 效果
2006/12/09 PHP
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
用PHP查询搜索引擎排名位置的代码
2010/01/05 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
php使用codebase生成随机数
2014/03/25 PHP
php中通用的excel导出方法实例
2017/12/30 PHP
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
jQuery之折叠面板的深入解析
2013/06/19 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
jQuery实现网页拼图游戏
2020/04/22 jQuery
JS求1到任意数之间的所有质数的方法详解
2019/05/20 Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
2020/04/14 Javascript
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
python实现合并两个数组的方法
2015/05/16 Python
python中的代码编码格式转换问题
2015/06/10 Python
python实现神经网络感知器算法
2017/12/20 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
python三方库之requests的快速上手
2019/03/04 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
Electric官网:美国高级眼镜和配件品牌
2020/06/04 全球购物
一个C/C++编程面试题
2013/11/10 面试题
资深财务管理人员自我评价
2013/09/22 职场文书
市场营销毕业生自荐信
2013/11/23 职场文书
美德好少年主要事迹
2014/01/29 职场文书
道路施工安全责任书
2014/07/24 职场文书
婚宴父亲致辞
2015/07/27 职场文书
vue3不同环境下实现配置代理
2022/05/25 Vue.js