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

标签 c# java cryptography rsa

我想在 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/

相关文章:

java - 使用 session 序列化处理 Vaadin 中不可序列化的 Guava EventBus

php - 双 key 加密/解密?

c# - 通过 Ajax 将复杂对象发布到 MVC

c# - 线程实现 (C#)

c# - 使用 EF4 的循环引用

c# - Entity Framework 代码优先,非空 setter 或 getter?

Java android Linearlayout设置两种颜色

java - 在 Java 中用堆栈编写计算跨度

c - 主要的 AES 加密,子的解密

c# - C++ RSA 使用 XML key 加密/解密