我想在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()));
我想在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);
}
答案 0 :(得分:5)
This page包含有关您情况的建议,因为您正在写出PKCS#8密钥(使用keyPair.getPrivate()。getEncoded())
使用这种方法,您将首先使用Java端的实用程序将私钥转换为PRIVATEKEYBLOB格式。
或者,您可以使用可以读取密钥的BouncyCastle C#(参见例如Org.BouncyCastle.Security.PrivateKeyFactory.CreateKey - 当然,您首先需要进行Base64解码)。
上一个问题的答案是从生成的BC密钥对象转换为RSACryptoServiceProvider:BouncyCastle RSAPrivateKey to .NET RSAPrivateKey
第三,您可能希望查看使用密钥库,例如: PKCS#12,这是一种更标准(和安全)的存储私钥的方式。
答案 1 :(得分:0)
这是一个示例代码,询问:
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