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中的sort方法使用详解
Jul 25 Python
python中黄金分割法实现方法
May 06 Python
在Python中处理字符串之isdigit()方法的使用
May 18 Python
利用Python学习RabbitMQ消息队列
Nov 30 Python
Python中用字符串调用函数或方法示例代码
Aug 04 Python
Python实现SQL注入检测插件实例代码
Feb 02 Python
Python中的list与tuple集合区别解析
Oct 12 Python
python 非线性规划方式(scipy.optimize.minimize)
Feb 11 Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 Python
django 前端页面如何实现显示前N条数据
Mar 16 Python
Python selenium页面加载慢超时的解决方案
Mar 18 Python
Python+Appium自动化测试的实战
Jun 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
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
jquery $.ajax入门应用二
2008/11/19 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
jQuery复制节点用法示例(clone方法)
2016/09/08 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
微信小程序实战之轮播图(3)
2017/04/17 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
node.js中fs文件系统目录操作与文件信息操作
2018/02/24 Javascript
基于element-ui的rules中正则表达式
2018/09/04 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
2019/08/16 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
python实现决策树分类
2018/08/30 Python
如何基于python实现不邻接植花
2020/05/01 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
Pycharm中如何关掉python console
2020/10/27 Python
Python实现简单的2048小游戏
2021/03/01 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
html5 标签
2009/07/16 HTML / CSS
手摸手教你用canvas实现给图片添加平铺水印的实现
2019/08/20 HTML / CSS
PHP中如何使用Cookie
2015/10/28 面试题
中软国际Java程序员笔试题
2014/07/19 面试题
2014年小班元旦活动方案
2014/02/16 职场文书
领导班子整改措施
2014/10/24 职场文书
关爱空巢老人感想
2015/08/11 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android