c语言 python rsa库_python使用rsa库做公钥解密(网上别处找不到)

本文介绍了如何使用Python的rsa库实现RSA公钥解密,提供了相关代码示例,包括从openssl生成密钥对,以及公钥解密的详细步骤。通过示例代码,展示了如何加载公钥并进行解密操作。
摘要由CSDN通过智能技术生成

版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址

http://www.cnblogs.com/Colin-Cai/p/8013009.html

作者:窗户

QQ:6679072

E-mail:6679072@qq.com

使用RSA公钥解密,用openssl命令就是openssl rsautl -verify -in cipher_text -inkey public.pem -pubin -out clear_text,但其python网上还真没有找到有博文去写,只有hash的rsa解签名。

想了想原理,然后到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才会认识。

-----BEGIN RSA PUBLIC KEY-----

-----END RSA PUBLIC KEY-----

求求你们不要再用 RSA 私钥加密公钥解密了,这非常不安全!

最近经常在网上看到有人说巨硬的 CNG(Cryptography Next Generation 即下一代加密技术) 只提供 RSA 公钥加密私钥解密,没有提供 RSA 私钥加密公钥解密,他们要自己封 ...

银联手机支付(.Net Csharp),3DES加密解密,RSA加密解密,RSA私钥加密公钥解密,.Net RSA 3DES C#

前段时间做的银联支付,折腾了好久,拼凑的一些代码,有需要的朋友可以参考,本人.Net新手,不保证准确性! 这个银联手机支付没有SDK提供,技术支持也没有.Net的,真心不好搞! RSA加解密,这里有个 ...

[WP8.1开发]RSA 使用BouncyCastle 公钥解密

写应用的时候遇到个服务器返回私钥加密过的数据 ,然后要在客户端用公钥解密的需求 ,一直没找到方法,应用搁置了一个学期,多方搜索,结论就是.net没有实现公钥解密的方法,要自己实现,于是硬着头皮开始看B ...

[WP8.1]RSA 使用BouncyCastle 公钥解密

写应用的时候遇到个服务器返回私钥加密过的数据 ,然后要在客户端用公钥解密的需求 ,一直没找到方法,应用搁置了一个学期,多方搜索,结论就是.net没有实现公钥解密的方法,要自己实现,于是硬着头皮开始看  ...

OpenSSL和Python实现RSA Key公钥加密私钥解密

基于非对称算法的RSA Key主要有两个用途,数字签名和验证(私钥签名,公钥验证),以及非对称加解密(公钥加密,私钥解密).本文提供一个基于OpenSSL和Python进行非对称加解密的例子. 1. ...

RSA私钥加密公钥解密、各种密钥格式转换

此随笔解决RSA加解密相关的3个问题,详情可以查看源码. 1.公钥加密.私钥解密2.各种格式RSA密钥之间的转换3.不限制加密原文的长度

使用Python的PIL库做的图像相似度对比源码备份

#!/usr/bin/python # Filename: histsimilar.py # -*- coding: utf-8 -*- import PIL.Image def make_regal ...

C++利用openssl进行公钥解密

私钥加密的部分内容,需要用公钥解密下面的实例代码,由于私钥加密后的字符串有不可打印字符,所以程序里面进行了base64,要用的时候先解dec base64 再传递给函数 进行解密 #include & ...

rsa字符串格式公钥转换python rsa库可识别的公钥形式

在爬虫分析的时候,经常在网页上看到如下格式的rsa公钥: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDC7kw8r6tq43pwApYvkJ5laljaN9BZb21 ...

随机推荐

把CMSampleBufferRef转成Data

CMSampleBufferRef ref=[output copyNextSampleBuffer]; NSLog(@"%@",ref); if(ref==NULL) break ...

2016/4/21 关于jquery复习

jQuert AJAX [1]jQuery load()方法 :是AJAX方法, 从服务器加载数据,并把数据放入被选元素中 语法: $(selector).load(URL,data,callback ...

ALAssets的两种用法

一: ALAssetsGroupEnumerationResultsBlock resultsBlock = ^(ALAsset *result, NSUInteger index, BOOL *st ...

【Windows 8】pid为4的system进程占用80端口的解决办法

因为Apache无法启动的原因,用netstat命令查看了一下80端口是否被占用了,如下: C:\Users\Maple>netstat -ano | findstr TCP LISTENING ...

C# Redis实战(四)

四.写入数据 在C# Redis实战(三)中我们已经配置好了web.config程序,并且能通过C#代码来读取和管理以上配置信息. 接下来,就可以进行Redis的数据写入了.Redis中可以用Stor ...

Python GUI

1.flexx Flexx 是一个纯Python工具包,用来创建图形化界面应用程序.其使用 Web 技术进行界面的渲染.你可以用Flexx来创建桌面应用,同时也可以导出一个应用到独立的 HTML 文档 ...

JVM Optimization

架构图 基本概念说明 堆(heap):数据存储,对象实例:空间往上增长,线程共享区:大小可通过-Xmx和-Xms配置 新生代(Young Generation):划分为Eden Space和两个Sur ...

转: rem与px的转换

rem是相对于根元素,这样就意味着,我们只需要在根元素确定一个参考值,这个参考值设置为多少,完全可以根据您自己的需求来定.· 我们知道,浏览器默认的字号16px,来看一些px单 ...

ubuntu vscode chrome 显示color emoji

win10 下vscode默认就可以显示color emoji, 真是亲儿子啊. 但linux下默认是显示黑白的. 绕了一些弯路之后,发现最简单的办法是: 1 下载google noto字体全集    ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值