博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RSA密钥的跨平台通用
阅读量:4457 次
发布时间:2019-06-08

本文共 1153 字,大约阅读时间需要 3 分钟。

RSA使用public key加密,用private key解密(签名相反,使用private key签名,用public key验证签名)。比如我跟合作方D之间的数据传输,我使用D提供给我的public key进行加密后,传给D,他使用他的private key解密后得到原文;response时,D使用我提供给他的public key加密,我收到后使用我的private key解密得到原文。一个常用的场景是两方之间的数据传输使用AES加密,再把AES的密钥通过RSA加密后一并传输。(AES的性能高过RSA)。

 

关于密钥的生成,,也可以使用特定语言平台所提供的方法生成。

//
 c#版本 (参数false生成私钥,public生成公钥)
RSACryptoServiceProvider rsa = 
new RSACryptoServiceProvider();
rsa.ExportParameters(
false); 
//
对像
rsa.ExportCspBlob(
false); 
//
字符串
rsa.ToXmlString(
false); 
//
xml格式

 

#
 python版本
import rsa
(pubkey, privkey) = rsa.newkeys(1024)
pub = pubkey.save_pkcs1()  
#
public key
pri = privkey.save_pkcs1() 
#
private key

 

也可以使用生成,这是一个OpenSSL在.net上的实现。里边有个cli 项目可以在命令行下运行,他生成的应该和linux下使用OpenSSL生成的一致的。

genrsa -out rsa_private_key.pem 1024
rsa -
in rsa_private_key.pem -pubout -out rsa_public_key.pem

然并卵,每个平台语言之间的RSA密钥不能通用,c#生成的java,python上用不了,OpenSSL生成的C#里用不了,

如果使用OpenSSL生成的密钥,在.net中使用OpenSSL.NET加密解密是个不错的选择。另一个办法就是各自语言所需的格式,比如这个

可以把OpenSSL Key转换成c#需要的xml格式,这样就可以直接使用.net framework里的方法进行RSA加密解密了。

 

有时候合作方给你的可能不是一个public key,而一个cert证书文件,这就需要了

#
在linux下,通过openssl提取
openssl x509 -
in ca.crt -pubkey

 

转载于:https://www.cnblogs.com/chy710/p/4901183.html

你可能感兴趣的文章
selenium--等待的三种方式
查看>>
nautilus-open-terminal很有用的插件--鼠标右键打开终端
查看>>
android中自定义的dialog中的EditText无法弹出输入法解决方案
查看>>
Android Activity整体管理和关闭工具类封装
查看>>
nginx 安装
查看>>
路径寻找(隐式图遍历)
查看>>
selenium下拉一个框内的滚动条
查看>>
跟老邓一起学Windows Phone7开发(一)第一个程序
查看>>
未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法
查看>>
Android电源管理
查看>>
C#_基础_方法以及方法重载(十)
查看>>
新起点新希望
查看>>
php 做数学运算时结果为0的原因
查看>>
LINQ系列:LINQ to DataSet的DataTable操作
查看>>
ASP。net 测验
查看>>
java开发环境搭建-慕课网
查看>>
NOIP2015-D2T3运输计划
查看>>
Z :彻底了解指针数组,数组指针以及函数指针 [复
查看>>
用的好好的,Cygwin变的不好用了。
查看>>
2013年终总结
查看>>