RSA:如何在java中生成私钥并在C#中使用它?

Moi*_*sei 8 c# java cryptography rsa

我想在java中生成私钥,将其保存为某个文件中的64个基本编码字符串,然后使用此保存的文件加密C#中的某个短语.我知道在java中生成密钥并用64 base编码.我的问题是如何在C#中使用此密钥?这是一个将私钥保存到文本文件中的java代码原型:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
RSAKeyGenParameterSpec spec = new RSAKeyGenParameterSpec(1024, RSAKeyGenParameterSpec.F4);
keyGen.initialize(spec);
KeyPair keyPair = keyGen.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
writeToFile("privateKey", Base64.encode(keyPair.getPrivate().getEncoded()));
Run Code Online (Sandbox Code Playgroud)

我想在C#中实现以下函数,但无法找到如何从私钥创建RSAParameters或RSACryptoServiceProvider

 public static string DecryptData(string privateKey64Base, string data64Base)
 {
   // create using privateKey64Base
   // create RSACryptoServiceProvider rsa using RSAParameters above
   // byte[] encryptedData = rsa.Encrypt(Convert.FromBase64String(data64Base);
 }
Run Code Online (Sandbox Code Playgroud)

Pet*_*man 5

此页面包含您的情况建议,因为您正在写出PKCS#8密钥(使用keyPair.getPrivate().getEncoded())

使用此方法,您将首先使用Java端的实用程序将私钥转换为PRIVATEKEYBLOB格式.

或者,你可以使用BouncyCastle C#来读取密钥(参见例如Org.BouncyCastle.Security.PrivateKeyFactory.CreateKey - 你当然需要首先进行Base64解码).

上一个问题的答案是从生成的BC密钥对象转换为RSACryptoServiceProvider:BouncyCastle RSAPrivateKey到.NET RSAPrivateKey

第三,您可能希望查看使用密钥库,例如PKCS#12,这是一种更标准(和安全)的存储私钥的方式.