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使用MD5加密字符串示例
Aug 22 Python
Python实现获取操作系统版本信息方法
Apr 08 Python
Python2.x利用commands模块执行Linux shell命令
Mar 11 Python
对pandas的dataframe绘图并保存的实现方法
Aug 05 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
May 16 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
Oct 29 Python
Python3 执行系统命令并获取实时回显功能
Jul 09 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
Flask中sqlalchemy模块的实例用法
Aug 02 Python
安装Anaconda3及使用Jupyter的方法
Oct 27 Python
pycharm + django跨域无提示的解决方法
Dec 06 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
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
php基础学习之变量的使用
2011/06/09 PHP
PHP设计模式之责任链模式的深入解析
2013/06/13 PHP
php并发加锁示例
2016/10/17 PHP
Yii框架中jquery表单验证插件用法示例
2016/10/18 PHP
从sohu弄下来的flash中展示图片的代码
2007/04/27 Javascript
javascript 对象比较实现代码
2009/04/27 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
2013/08/13 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
一个JavaScript获取元素当前高度的实例
2014/10/29 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
深入了解js原型模式
2019/05/30 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
Javascript实现简易天数计算器
2020/05/18 Javascript
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
Python中装饰器的一个妙用
2015/02/08 Python
Python下Fabric的简单部署方法
2015/07/14 Python
python操作mysql数据库
2017/03/05 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
安装PyInstaller失败问题解决
2019/12/14 Python
python2.7使用scapy发送syn实例
2020/05/05 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
eBay德国站:eBay.de
2017/09/14 全球购物
安全生产演讲稿
2014/05/09 职场文书
大型活动组织方案
2014/05/10 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
音乐教师求职信
2014/06/28 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书