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密钥的跨平台通用的更多相关文章

  1. Java与.NET兼容的RSA密钥持久化方法

    默认情况下,.NET生成的RSA密钥对可以用XML或字节流来保存,而JAVA中生成的RSA密钥对只能用字节流来保存.而它们的字节流格式不同,就导致Java中生成的RSA密钥对不能在.NET中使用,而. ...

  2. RSA密钥之C#格式与Java格式转换

    前言 最近由于项目需求,服务端由c#编写,客户端由java编写.通信数据使用RSA非对称加密.但是java和c#生成的密钥格式是不一样的,所以需要转换格式才可以正常使用.网上搜到使用java进行格式转 ...

  3. RSA密钥生成与使用

    RSA密钥生成与使用 openssl生成工具链接:http://pan.baidu.com/s/1c0v3UxE 密码:uv48 1. 打开openssl密钥生成软件打开 openssl 文件夹下的  ...

  4. RSA密钥,JAVA与.NET之间转换

    最近在做银联的一个接口,用到RSA签名,悲剧来了,.net用的RSA密钥格式和JAVA用的不一样 .net为XML格式 <RSAKeyValue><Modulus>53Knuj ...

  5. JAVA,NET RSA密钥格式转换

    JAVA和NET RSA密钥格式相互转换(公钥,私钥) 做了一个小项目遇到java和.net非对称加密问题,java的公钥和私钥就直接是一个字符串的形式展示的,但是.net是以xml简单包裹形式展示的 ...

  6. Atitit.rsa密钥生成器的attilax总结

    Atitit.rsa密钥生成器的attilax总结 1.1. 密钥生成器 1 1.2. 生成固定的密钥 2 1.2.1. 设置或重置 SecureRandom 对象的随机数种子 2 1.3. 密钥结构 ...

  7. cmd命令进行RSA 密钥加密操作

    --参考 http://msdn.microsoft.com/zh-cn/library/2w117ede http://msdn.microsoft.com/zh-cn/library/yxw286 ...

  8. .NET Core RSA密钥的xml、pkcs1、pkcs8格式转换和JavaScript、Java等语言进行对接

    众所周知在.NET下的RSA类所生成的密钥为Xml格式,而其他语言比如java一般使用pkcs8格式的密钥,JavaScript一般使用pkcs1格式.我们在开发过程中很可能遇到需要与其他语言开发的a ...

  9. [Linux] 在 Linux CLI 使用 ssh-keygen 生成 RSA 密钥

    RSA 是一种公钥加密算法,在 1977 年由麻省理工学院的 Ron Rivest, Adi Shamir, Leonard Adleman 三人一起提出,因此该算法命名以三人姓氏首字母组合而成. S ...

随机推荐

  1. JS --正则表达式验证、实战之邮箱模式

     JS验证格式:提高用户体验,验证文本. 需要防止程序员的代码结构更改攻击,因为web段的代码有可能会被更改,更改后JS有可能会验证不住那么,C#端在JS段通过验证的情况下,还需要进行二次验证 < ...

  2. HTML <!DOCTYPE> Declaration

    <!DOCTYPE html><html><head><title>Title of the document</title></he ...

  3. dmesg

    在开机的时候你会发现有很多的讯息出现吧,例如 CPU 的形式.硬盘. 光盘型号及硬盘分割表等等,这 些信息的产生都是核心 (kernel) 在进行硬件的测试与驱动啦.要看这些讯息你可以用 dmesg  ...

  4. python 注册

    1.打开网址,点击 获得注册码 http://idea.qinxi1992.cn/  2.help -- register 第二步: http://jetbrains.tencent.click/   ...

  5. 禅道Linux一键安装版

    禅道Linux一键安装版 Linux一键安装包内置了apache, php, mysql这些应用程序,只需要下载解压缩即可运行禅道.从7.3版本开始,linux一键安装包分为32位和64位两个包,大家 ...

  6. 定位frame 中的对象

    在web 应用中经常会出现frame 嵌套的应用,假设页面上有A.B 两个frame,其中B 在A 内,那么定位B 中的内容则需要先到A,然后再到B.switch_to_frame 方法可以把当前定位 ...

  7. SQL获取所有数据库名、表名、储存过程以及参数列表

    SQL获取所有数据库名.表名.储存过程以及参数列表 1.获取所有用户名:SELECT name FROM Sysusers where status='2' and islogin='1'islogi ...

  8. Java核心知识点学习----线程同步工具类,CyclicBarrier学习

    线程同步工具类,CyclicBarrier日常开发较少涉及,这里只举一个例子,以做备注.N个人一块出去玩,相约去两个地方,CyclicBarrier的主要作用是等待所有人都汇合了,才往下一站出发. 1 ...

  9. GIS开发环境全面升级10.1

    最近,因为公司开发的需要,对开发环境进行全面的升级,在这其中也遇到了不少问题,在之后将陆续整理出来,以便以后查看. 之前开发环境:VS2008,ArcGIS9.3,ArcEngine9.3,Oracl ...

  10. 第五章 springboot + mybatis

    springboot集成了springJDBC与JPA,但是没有集成mybatis,所以想要使用mybatis就要自己去集成.集成方式相当简单. 1.项目结构 2.pom.xml <!-- 与数 ...