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

时间: 2024-11-08 04:33:34

RSA密钥的跨平台通用的相关文章

RSA加密(跨平台通用的)

1 /// <summary> 2 /// RSA加密 3 /// </summary> 4 /// <param name="strPublickey"></param> 5 /// <param name="content"></param> 6 /// <returns></returns> 7 public string RsaEncrypt(string str

Windows下RSA密钥生成工具openssl

点击下载 1. 生成原始 RSA私钥文件 private_key.pem openssl genrsa -out private_key.pem 1024 2. 将原始 RSA私钥转换为 pkcs8格式 openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM -nocrypt -out rsa_private_key.pem 3. 生成 RSA公钥 rsa_public_key.pem openssl rsa -in p

.NET与JAVA RSA密钥格式转换

一.该篇内容用于记录.net和Java之间,RSA公密钥的转换 using Org.BouncyCastle.Asn1.Pkcs; using Org.BouncyCastle.Asn1.X509; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Math; using Org.BouncyCastle.Pkcs; using Org.BouncyCastle.Security; using Org.BouncyC

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

前言 最近由于项目需求,服务端由c#编写,客户端由java编写.通信数据使用RSA非对称加密.但是java和c#生成的密钥格式是不一样的,所以需要转换格式才可以正常使用.网上搜到使用java进行格式转换的代码(如:http://blog.csdn.net/road2010/article/details/40071881 ),本文将给出一种c#的实现方法. 密钥格式 java密钥格式如下: 私钥: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBA

配置错误:未能使用提供程序“RsaProtectedConfigurationProvider”进行解密。提供程序返回错误信息为: 打不开 RSA 密钥容器。

http://www.cnblogs.com/jiaruistone/articles/1441634.html 我们如果想对web.config的数据库连接字符串进行加密的话,那么这里提供了两个方法. 方法一.     使用“DataProtectionConfigurationProvider”形式加密,创建test.aspx文件,代码如下: 需要添加引用 using System.Web.Configuration; using System.IO; //加密 protected void

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

最近在做银联的一个接口,用到RSA签名,悲剧来了,.net用的RSA密钥格式和JAVA用的不一样 .net为XML格式 <RSAKeyValue><Modulus>53KnujHcV0962zoLigW8d4AUb+1TS3LiySGrXhF5FgjUQhLzI6PCM/hyHPhUat6MTcgWK3kAVInughtNOHXrBI92I1nAdwlMwBPh+F+0UGhQDR5LMaBg7tQq7ebyhy8/QRCtxEO+F0QQYYv0t15RIup+F+08HdWSn

JAVA,NET RSA密钥格式转换

JAVA和NET RSA密钥格式相互转换(公钥,私钥) 不多说直接上代码,需要引用开源类库BouncyCastle.Crypto.dll 也可以在这里下载http://downloads.bouncycastle.org/csharp/bccrypto-net-1.7-bin.zip 以下为转化代码 1 using System; 2 using System.Xml; 3 using Org.BouncyCastle.Asn1.Pkcs; 4 using Org.BouncyCastle.As

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

众所周知在.NET下的RSA类所生成的密钥为Xml格式,而其他语言比如java一般使用pkcs8格式的密钥,JavaScript一般使用pkcs1格式.我们在开发过程中很可能遇到需要与其他语言开发的api进行对接,如果遇到RSA加密解密,我们肯定需要保证key是相同的,才能保证数据的正确处理,我们肯定需要对密钥进行转换,下面我将我自己的使用经验分享给大家. pkcs1和pkcs8的操作借助了开源项目bouncycastle RSAUtil 项目 RSAUtil 项目是.NET Core下RSA算

C#和JAVA的RSA密钥、公钥转换

C#的秘钥跟JAVA的密钥区别 RSA对于程序本身是没有区别的,其格式都是相同的.对于不同的程序来说,存储使用的语法(包装的类)会有所不同. RSA语法和语法标准有很多,大的类型大概分为ASN.1.PKCS.X.509. RSA语法介绍 ASN.1.PKCS是最初的,也是最主要的RSA公钥和私钥的语法标准,被RSA Lab所维护. ASN.1.PKCS#1都定义了公钥和私钥的类型--序列化的数字.为了下一个层次的抽象(适当的包装),现在一般使用的组合是:PKCS#8的私钥,X.509的公钥 .