【问题标题】:Generate public-private key pair and show them in textbox in asp.net生成公钥-私钥对并在 asp.net 的文本框中显示它们
【发布时间】:2011-09-25 17:46:23
【问题描述】:

任何机构都可以解释 RSAParameters 的参数 我见过像p,d,e,q,...这样的参数 我需要它的私钥和公钥

我找到了链接

http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsaparameters%28v=vs.90%29.aspx[^]

我正在像这样使用示例代码 任何人都可以说这是对还是错 示例代码:

  //Generate a public/private key pair.
            RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
            //Save the public key information to an RSAParameters structure.
            RSAParameters RSAKeyInfo = RSA.ExportParameters(true);
            //public key    
            TextBox5.Text = Convert.ToBase64String(RSAKeyInfo.Exponent);
            // private key  
            TextBox6.Text = Convert.ToBase64String(RSAKeyInfo.D);

他们已经给了 公钥是 {e,n} 其中 n = (P*Q) 的结果 私钥是 {d, n} 其中 n = (P*Q) 的结果

在公钥和私钥的示例代码中,我所做的是否正确

非常感谢

【问题讨论】:

  • 请记住,并非所有字节数组都可以显示为有效字符串,并且它们不必在从 byte[] 到 string 到 byte[] 的往返过程中幸存下来
  • Exponent 属性应该返回像“AQAB”这样的指数,而不是公钥......在您的情况下尝试Modulus 属性会更有意义

标签: c# asp.net rsacryptoserviceprovider


【解决方案1】:

使用 BouncyCastle API

http://www.bouncycastle.org/

和以下类似的东西:

public AsymmetricCipherKeyPair GenerateKeys(int keySizeInBits)
{
  RsaKeyPairGenerator r = new RsaKeyPairGenerator();
  r.Init(new KeyGenerationParameters(new SecureRandom(),
    keySizeInBits));
  AsymmetricCipherKeyPair keys = r.GenerateKeyPair();
  return keys;
}

您可以使用格式正确的字符串访问具有 .Public 和 .Private 属性的对象。

不久前我遇到了一个类似的问题,这是我能找到的最佳解决方案。我手头没有确切的代码,但如果需要,我会在我进入办公室时将其发布,但以上应该可以工作。

已更新代码

这是我用来生成公钥/私钥的代码。

  using Org.BouncyCastle.Crypto;
  using Org.BouncyCastle.Crypto.Generators;
  using Org.BouncyCastle.Security;

  public static AsymmetricCipherKeyPair GenerateKeys(int keySizeInBits)
    {
        var r = new RsaKeyPairGenerator();
        r.Init(new KeyGenerationParameters(new SecureRandom(),keySizeInBits));
        var keys = r.GenerateKeyPair();
        return keys;
    }



static void Main(string[] args)
{
    var keys = GenerateKeys(2048);


    var publicKey = keys.Public.ToString();

    var textWriter = new StreamWriter("private.key");
    var pemWriter = new PemWriter(textWriter);
    pemWriter.WriteObject(keys.Private);
    pemWriter.Writer.Flush();
    textWriter.Close();


    textWriter = new StreamWriter("public.key");
    pemWriter = new PemWriter(textWriter);
    pemWriter.WriteObject(keys.Public);
    pemWriter.Writer.Flush();
    textWriter.Close();

    Console.ReadKey();


}

【讨论】:

  • 当我查看 var "publicKey" 时,我看到了 "Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters"。这是预期的吗?
猜你喜欢
  • 2012-09-07
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 2021-06-12
  • 2012-04-05
  • 1970-01-01
  • 2022-01-13
  • 2019-10-12
相关资源
最近更新 更多