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中用Spark模块的使用教程
Apr 13 Python
Python中单、双下划线的区别总结
Dec 01 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
Dec 15 Python
Python 使用with上下文实现计时功能
Mar 09 Python
pandas 按照特定顺序输出的实现代码
Jul 10 Python
python使用循环打印所有三位数水仙花数的实例
Nov 13 Python
Django框架 querySet功能解析
Sep 04 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
Sep 05 Python
Python 实现PS滤镜的旋涡特效
Dec 03 Python
PyTorch中的拷贝与就地操作详解
Dec 09 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
Jan 27 Python
Django如何重置migration的几种情景
Feb 24 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结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
FLASH 广告之外的链接
2008/12/16 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
Jquery性能优化详解
2014/05/15 Javascript
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
javascript实现动态标签云
2015/10/16 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
JavaScript实现简单进度条效果
2020/03/25 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
[06:25]第二届DOTA2亚洲邀请赛主赛事第二天比赛集锦.mp4
2017/04/03 DOTA
Python用字典构建多级菜单功能
2019/07/11 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
以工厂直接定价的传奇性能:Ben Hogan Golf
2019/01/04 全球购物
三星法国官方网站:Samsung法国
2019/10/31 全球购物
企业面试题试卷附带答案
2015/12/20 面试题
教师通用专业自荐书范文
2014/02/11 职场文书
中国梦演讲稿教师篇
2014/04/23 职场文书
爱心捐助倡议书
2014/05/19 职场文书
2014业务员年终工作总结
2014/12/09 职场文书
python 遍历磁盘目录的三种方法
2021/04/02 Python
Python循环之while无限迭代
2022/04/30 Python