RSA密钥的跨平台通用
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)。
关于密钥的生成,Linux下常用OpenSSL生成,也可以使用特定语言平台所提供的方法生成。
// 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生成,这是一个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加密解密是个不错的选择。另一个办法就是把密钥转换成各自语言所需的格式,比如这个http://csslab.s3.amazonaws.com/csslabs/Siva/opensslkey.cs
可以把OpenSSL Key转换成c#需要的xml格式,这样就可以直接使用.net framework里的方法进行RSA加密解密了。
有时候合作方给你的可能不是一个public key,而一个cert证书文件,这就需要从这个证书里提取出public key了
#在linux下,通过openssl提取
openssl x509 -in ca.crt -pubkey
RSA密钥的跨平台通用的更多相关文章
- Java与.NET兼容的RSA密钥持久化方法
默认情况下,.NET生成的RSA密钥对可以用XML或字节流来保存,而JAVA中生成的RSA密钥对只能用字节流来保存.而它们的字节流格式不同,就导致Java中生成的RSA密钥对不能在.NET中使用,而. ...
- RSA密钥之C#格式与Java格式转换
前言 最近由于项目需求,服务端由c#编写,客户端由java编写.通信数据使用RSA非对称加密.但是java和c#生成的密钥格式是不一样的,所以需要转换格式才可以正常使用.网上搜到使用java进行格式转 ...
- RSA密钥生成与使用
RSA密钥生成与使用 openssl生成工具链接:http://pan.baidu.com/s/1c0v3UxE 密码:uv48 1. 打开openssl密钥生成软件打开 openssl 文件夹下的 ...
- RSA密钥,JAVA与.NET之间转换
最近在做银联的一个接口,用到RSA签名,悲剧来了,.net用的RSA密钥格式和JAVA用的不一样 .net为XML格式 <RSAKeyValue><Modulus>53Knuj ...
- JAVA,NET RSA密钥格式转换
JAVA和NET RSA密钥格式相互转换(公钥,私钥) 做了一个小项目遇到java和.net非对称加密问题,java的公钥和私钥就直接是一个字符串的形式展示的,但是.net是以xml简单包裹形式展示的 ...
- Atitit.rsa密钥生成器的attilax总结
Atitit.rsa密钥生成器的attilax总结 1.1. 密钥生成器 1 1.2. 生成固定的密钥 2 1.2.1. 设置或重置 SecureRandom 对象的随机数种子 2 1.3. 密钥结构 ...
- cmd命令进行RSA 密钥加密操作
--参考 http://msdn.microsoft.com/zh-cn/library/2w117ede http://msdn.microsoft.com/zh-cn/library/yxw286 ...
- .NET Core RSA密钥的xml、pkcs1、pkcs8格式转换和JavaScript、Java等语言进行对接
众所周知在.NET下的RSA类所生成的密钥为Xml格式,而其他语言比如java一般使用pkcs8格式的密钥,JavaScript一般使用pkcs1格式.我们在开发过程中很可能遇到需要与其他语言开发的a ...
- [Linux] 在 Linux CLI 使用 ssh-keygen 生成 RSA 密钥
RSA 是一种公钥加密算法,在 1977 年由麻省理工学院的 Ron Rivest, Adi Shamir, Leonard Adleman 三人一起提出,因此该算法命名以三人姓氏首字母组合而成. S ...
随机推荐
- linux C学习笔记03--单链表
单链表一直是程序员的基础,我也来复习下,下面是link.c中的代码,供main.c 调用,代码很简单,单链表的插入,删除,查找和遍历输出, #include <stdio.h> #incl ...
- 判断Ie浏览器
ie8以下 if(!+[1,]) if(window.attachEvent){ alert("ie")}else if(window.addEventListener){aler ...
- 时间转换为yyyymmdd
Convert.ToDateTime(tbinpici.Text).ToString("yyyyMMdd")
- 使用spring 4.0 + maven 构建超简单的web项目
一.需求 使用spring去管理web项目,是目前非常流行的一种思路,本文将介绍使用maven+spring 4.0.2 来构建一个简单的web项目. 二.实现 1.新建一个maven项目,如下图所示 ...
- phpmyadmin连接,管理多个mysql服务器
方法一,修改phpMyAdmin/libraries/config.default.php 修改配置文件前,最好先备份一下,万一改错地方了,显示不了,就郁闷了. /** * allow login t ...
- JS倒计时网页自动跳转代码
<title>JS倒计时网页自动跳转代码</title> <script language="JavaScript" type="text/ ...
- vim global命令
global命令格式 : [range]global/{pattern}/{command} global命令在[range]指定的文本范围内(缺省为整个文件)查找{pattern},然后对匹配到的行 ...
- Linux命令小结:fdisk
查看分区信息 分区信息包括容量.扇区数目.柱面数目.磁头数目和IO大小等信息. root@cvm:/# fdisk -l /dev/sda7 Disk /dev/sda7: 441.8 GB, 441 ...
- Maven学习之 Settings
虽然天天在用,但是没有系统的学习过,总觉得别扭. 只能用于Java项目. 约定: repository 翻译成 仓库 build 翻译成 构建 build system 翻译成 构建系统 build ...
- 正向代理与反向代理的区别【Nginx读书笔记】(zz)
正向代理与反向代理的区别[Nginx读书笔记] 正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器 ...