我想在 java 中生成私钥,将其保存为某个文件中的 64 位编码字符串 然后使用这个保存的文件在 C# 中加密一些短语。 我知道用 java 生成 key 并用 64 位编码。 我的问题是如何在 C# 中使用此 key ? 这是将私钥保存到文本文件中的 java 代码原型(prototype):
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);
}
最佳答案
This page包含针对您的情况的建议,因为您正在写出 PKCS#8 key (使用 keyPair.getPrivate().getEncoded())
使用这种方法,您将首先使用 Java 端的实用程序将私钥转换为 PRIVATEKEYBLOB 格式。
或者,您可以使用 BouncyCaSTLe C#,它可以读取 key (参见例如 Org.BouncyCaSTLe.Security.PrivateKeyFactory.CreateKey - 当然,您需要先进行 Base64 解码)。
上一个问题的答案是将生成的 BC key 对象转换为 RSACryptoServiceProvider:BouncyCastle RSAPrivateKey to .NET RSAPrivateKey
第三,您可能想看看使用 keystore ,例如PKCS#12,这是一种更标准(和安全)的私钥存储方式。
关于c# - RSA:如何在 java 中生成私钥并在 C# 中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2185103/