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 StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
Python获取某一天是星期几的方法示例
Jan 17 Python
python利用Guetzli批量压缩图片
Mar 23 Python
Python实现简易版的Web服务器(推荐)
Jan 29 Python
详解Python3.6安装psutil模块和功能简介
May 30 Python
tensorflow实现简单逻辑回归
Sep 07 Python
解决pycharm无法识别本地site-packages的问题
Oct 13 Python
使用python将图片格式转换为ico格式的示例
Oct 22 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
解决python执行较大excel文件openpyxl慢问题
May 15 Python
pandas将list数据拆分成行或列的实现
Dec 13 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&java(二)
2006/10/09 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
PHP使用内置dir类实现目录遍历删除
2015/03/31 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
php显示页码分页类的封装
2017/06/08 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
常用js脚本
2006/12/03 Javascript
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
JS对select控件option选项的增删改查示例代码
2013/10/21 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
jQuery实现高亮显示网页关键词的方法
2015/08/07 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
vue移动端弹框组件的实例
2018/09/25 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
JS正则表达式常见函数与用法小结
2020/04/13 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
python机器学习理论与实战(二)决策树
2018/01/19 Python
Django REST Framework序列化外键获取外键的值方法
2019/07/26 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
python函数超时自动退出的实操方法
2020/12/28 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
请假条怎么写
2014/04/10 职场文书
学雷锋先进个人事迹
2014/05/26 职场文书
立志成才演讲稿
2014/09/04 职场文书
2016关于军训的心得体会
2016/01/11 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书
Python爬取某拍短视频
2021/06/11 Python