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访问纯真IP数据库的代码
May 19 Python
Python去掉字符串中空格的方法
Mar 11 Python
Python下的subprocess模块的入门指引
Apr 16 Python
python模拟enum枚举类型的方法小结
Apr 30 Python
Python实现将Excel转换成xml的方法示例
Aug 25 Python
Python Pillow Image Invert
Jan 22 Python
Python数据类型之Dict字典实例详解
May 07 Python
python 解决tqdm模块不能单行显示的问题
Feb 19 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
在Mac中配置Python虚拟环境过程解析
Jun 22 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
python实现简单反弹球游戏
Apr 12 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
我的论坛源代码(三)
2006/10/09 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
小程序中this.setData的使用和注意事项
2019/08/28 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
详解javascript脚本何时会被执行
2021/02/05 Javascript
Python守护进程(daemon)代码实例
2015/03/06 Python
python简单实现旋转图片的方法
2015/05/30 Python
使用Python AIML搭建聊天机器人的方法示例
2018/07/09 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
创业计划书怎样才能打动风投
2014/01/01 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
个人求职自荐信范文
2015/03/06 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
SQL SERVER存储过程用法详解
2022/02/24 SQL Server
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏