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

RSA:如何在java中生成私钥并在C#中使用它?,c#,java,cryptography,rsa,C#,Java,Cryptography,Rsa,我想用java生成私钥,将其保存为某个文件中的64位编码字符串 然后使用保存的文件加密C#中的某些短语。 我知道如何用java生成密钥,并用64进制编码。 我的问题是如何在C#中使用此键? 这是一个java代码原型,用于将私钥保存到文本文件中: KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); RSAKeyGenParameterSpec spec = new RSAKeyGenParameterSpec(1024, R

我想用java生成私钥,将其保存为某个文件中的64位编码字符串 然后使用保存的文件加密C#中的某些短语。 我知道如何用java生成密钥,并用64进制编码。 我的问题是如何在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()));
我想在C#中实现以下函数,但找不到如何创建参数或 来自私钥的RSACryptServiceProvider

 public static string DecryptData(string privateKey64Base, string data64Base)
 {
   // create using privateKey64Base
   // create RSACryptoServiceProvider rsa using RSAParameters above
   // byte[] encryptedData = rsa.Encrypt(Convert.FromBase64String(data64Base);
 }
包含针对您的情况的建议,因为您正在编写PKCS#8个密钥(使用keyPair.getPrivate().getEncoded())

使用这种方法,首先可以使用Java端的实用程序将私钥转换为PRIVATEKEYBLOB格式

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

上一个问题的答案是如何将生成的BC密钥对象转换为RSACryptServiceProvider:


第三,您可能想看看如何使用密钥库,例如PKCS#12,这是一种更标准(更安全)的存储私钥的方法。

下面是一个示例代码:

AsymmetricKeyParameter keyPair = Org.BouncyCastle.Security.PrivateKeyFactory.CreateKey(Convert.FromBase64String("PKCS#8Key"));
var decryptEngine = new Pkcs1Encoding(new RsaEngine());
decryptEngine.Init(false, keyPair);
var decrypted = Encoding.UTF8.GetString(decryptEngine.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length));

要归功于@peter dettman

我相信已经有人问过了。。。我就是找不到汉克斯!你能推荐一些关于keystore的读物吗?我经常遇到它,但我不理解它的概念。+1,我有几天无法访问文章,因为网站不可用,如果您可以将代码粘贴到这里或添加对更持久的网站(如Github)的引用,那就太好了。