python下RSA加密解密以及跨平台问题
Reference: http://www.cnblogs.com/luchanghong/archive/2012/07/18/2596886.html
项目合作需要,和其他网站通信,消息内容采用RSA加密方式传递。之前没有接触过RSA,于是两个问题出现了:
声明: 环境WIN 7 + python 2.6.6 RSA格式:PEM
一、Python下RSA加密解密怎么做? 现在网上搜索关于RSA的信息,然后看一下Python下是怎么做的。
找到两种方法:
1、使用rsa库 安装
pip install rsa
可以生成RSA公钥和密钥,也可以load一个.pem文件进来。

1 # -*- coding: utf-8 -*-
2 __author__ = 'luchanghong'
3 import rsa
4
5 # 先生成一对密钥,然后保存.pem格式文件,当然也可以直接使用
6 (pubkey, privkey) = rsa.newkeys(1024)
7
8 pub = pubkey.save_pkcs1()
9 pubfile = open('public.pem','w+')
10 pubfile.write(pub)
11 pubfile.close()
12
13 pri = privkey.save_pkcs1()
14 prifile = open('private.pem','w+')
15 prifile.write(pri)
16 prifile.close()
17
18 # load公钥和密钥
19 message = 'hello'
20 with open('public.pem') as publickfile:
21 p = publickfile.read()
22 pubkey = rsa.PublicKey.load_pkcs1(p)
23
24 with open('private.pem') as privatefile:
25 p = privatefile.read()
26 privkey = rsa.PrivateKey.load_pkcs1(p)
27
28 # 用公钥加密、再用私钥解密
29 crypto = rsa.encrypt(message, pubkey)
30 message = rsa.decrypt(crypto, privkey)
31 print message
32
33 # sign 用私钥签名认真、再用公钥验证签名
34 signature = rsa.sign(message, privkey, 'SHA-1')
35 rsa.verify('hello', signature, pubkey)

2、使用M2Crypto python关于RSA的库还是蛮多的,当然也可以直接用openSSL。M2Crypto安装的时候比较麻烦,虽然官网有exe的安装文件,但是2.6的有bug,建议使用0.19.1版本,最新的0.21.1有问题。

1 # -*- coding: utf-8 -*-
2 __author__ = 'luchanghong'
3 from M2Crypto import RSA,BIO
4
5 rsa = RSA.gen_key(1024, 3, lambda *agr:None)
6 pub_bio = BIO.MemoryBuffer()
7 priv_bio = BIO.MemoryBuffer()
8
9 rsa.save_pub_key_bio(pub_bio)
10 rsa.save_key_bio(priv_bio, None)
11
12 pub_key = RSA.load_pub_key_bio(pub_bio)
13 priv_key = RSA.load_key_bio(priv_bio)
14
15 message = 'i am luchanghong'
16
17 encrypted = pub_key.public_encrypt(message, RSA.pkcs1_padding)
18 decrypted = priv_key.private_decrypt(encrypted, RSA.pkcs1_padding)
19
20 print decrypted

用法差不多一致。load密钥的方式也有好几种。 二、跨平台密钥不统一 RSA加密验证搞定了,但是和java平台交互的时候出问题,java生成的密钥用Python根本load不了,更别说加密了,反之Java也load不了Python生成的密钥。 上网查找原因,RSA认真流程肯定没有问题,关键是不同平台执行RSA的标准有些偏差。
python下RSA加密解密以及跨平台问题的更多相关文章
- Python下RSA加密/解密, 签名/验证
原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() import rsa # 生成密钥 (pubkey, privkey) = rsa.newkeys(1 ...
- python下RSA 加密/解密,签名/验证
基于win7 + python3.4 原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() import rsa # 生成密钥 (pubkey, privk ...
- python实现RSA加密解密方法
python3.5 安装pip 安装rsa python -m pip install rsa 我们可以生成RSA公钥和密钥,也可以load一个.pem文件进来 # -*- coding: utf-8 ...
- python RSA加密解密及模拟登录cnblog
1.公开密钥加密 又称非对称加密,需要一对密钥,一个是私人密钥,另一个则是公开密钥.公钥加密的只能私钥解密,用于加密客户上传数据.私钥加密的数据,公钥可以解密,主要用于数字签名.详细介绍可参见维基百科 ...
- python rsa 加密解密 (编解码,base64编解码)
最近有需求,需要研究一下RSA加密解密安全:在网上百度了一下例子文章,很少有文章介绍怎么保存.传输.打印加密后的文本信息,都是千篇一律的.直接在一个脚本,加密后的文本信息赋于变量,然后立马调用解密.仔 ...
- python实现RSA加密和签名以及分段加解密的方案
1.前言 很多朋友在工作中,会遇到一些接口使用RSA加密和签名来处理的请求参数,那么遇到这个问题的时候,第一时间当然是找开发要加解密的方法,但是开发给加解密代码,大多数情况都是java,c++,js等 ...
- 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输
Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...
- C# Java间进行RSA加密解密交互
原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益,但没能解决我的实际问题,终于,还是被我捣 ...
- RSA加密解密及数字签名Java实现--转
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院 ...
随机推荐
- iOS仿支付宝芝麻信用仪表盘效果
概述 自定义View之高仿支付宝芝麻信用分数仪表盘动画效果 详细 代码下载:http://www.demodashi.com/demo/10654.html 仿支付宝芝麻信用仪表盘效果 一.主要思路 ...
- js getAttribute getAttributeNode
getAttribute():返回属性值,是一个文本字符串 getAttributeNode("属性名"):返回属性节点,是一个对象 <p id="bj" ...
- 列表生成式&生成器表达式
一.列表生成式 def func(): return [lambda x:i*x for i in range(4)] print([j(2) for j in func()]) 结果:[6,6,6, ...
- 如何查看USB方式连接Android设备的外接设备信息
1,USB存储设备(如:U盘,移动硬盘): //USB存储设备 插拔监听与 SD卡插拔监听一致. private USBBroadCastReceiver mBroadcastReceiver; In ...
- Android学习系列(2)--App自动更新之通知栏下载
这篇文章是Android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用.1.设计思路,使用VersionCode定义为版本升级参数. android为我们定义版本提供了2个属性:& ...
- python练习笔记——编写一个装饰器,模拟登录的简单验证
编写一个装饰器,模拟登录的简单验证(至验证用户名和密码是否正确) 如果用户名为 root 密码为 123则正确,否则不正确.如果验证不通过则不执行被修饰函数 #编写一个装饰器,模拟登录的简单验证 #只 ...
- android binder 机制二(client和普通server)
在讲它们之间的通信之前,我们先以MediaServer为例看看普通Server进程都在干些什么. int main() { -- // 获得ProcessState实例 sp<ProcessSt ...
- c编程:求出4×4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和。
//求出4×4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和 #include <stdio.h> int main() { int sum=0; int max, ...
- Python ljust() 方法
描述 ljust() 方法返回一个原字符串左对齐,并使用指定字符填充至指定长度的新字符串,默认的填充字符为空格.如果指定的长度小于原字符串的长度则返回原字符串. 语法 ljust() 方法语法: S. ...
- Java和C++通过Socket通信中文乱码的解决
理想的开发状态是我开始就是C开发,一直是C的开发,现在还是C的开发,若干年后,幸运的话,我可以成为C语言的高手或者专家…… 更实际的情况是我开始是C开发,后来变成了JAVA开发,然后又做起了VC++的 ...