【问题标题】:RSA: How to generate private key in java and use it in C#?RSA:如何在 java 中生成私钥并在 C# 中使用它?
【发布时间】:2010-02-02 15:19:57
【问题描述】:

我想在 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# 中实现以下功能,但找不到如何创建 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);
 }

【问题讨论】:

  • 我确定已经有人问过了...我只是找不到

标签: c# java cryptography rsa


【解决方案1】:

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,由于网站不可用,我有几天无法访问文章,如果您可以将代码粘贴到此处或添加对更持久的网站(例如 Github)的引用,那就太好了.
【解决方案2】:

这里是询问的示例代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 2011-08-21
    • 2018-08-23
    • 2011-07-11
    • 1970-01-01
    • 2019-08-15
    • 2017-11-02
    • 2023-03-29
    相关资源
    最近更新 更多