【问题标题】:RSA - export public key for different languageRSA - 导出不同语言的公钥
【发布时间】:2010-11-16 16:46:01
【问题描述】:

我正在使用 C# 生成 RSA 公钥/私钥来加密用户信息。我需要为其他系统和语言提供公钥和指数。他们将对数据进行签名,C# Web 服务将对其进行解密并对其采取行动。

现在,我有

RSA rsa = new RSACryptoServiceProvider(2048); // Generate a new 2048 bit RSA key RSAParameters par = rsa.ExportParameters(false);

但是 par.Exponent 和 par.Modulo 的结果是字节数组。如何将指数转换为可以用另一种语言解析的字符串。我见过的其他语言的示例似乎 b

【问题讨论】:

  • 签名是用私钥完成的,verifying是用公钥完成的。 加密使用公钥完成,解密使用私钥完成。
  • @gregs - 对此我深表歉意,我删除了评论并感谢您的帮助。

标签: c# cryptography rsa


【解决方案1】:

您可以使用普通的十六进制字符串或 Base64 编码 - 两者都是将二进制数据作为字符串传输的成熟方法:

byte[] byteArray = new byte[] { 1, 2, 3, 253, 254, 255 };

// hexString will be "010203FDFEFF"
string hexString = string.Concat(byteArray.Select(b => b.ToString("X2")));

// b64String will be "AQID/f7/"
string b64String = Convert.ToBase64String(byteArray);

(请注意,如果您不使用 .NET4,则需要将数组传递给 Concat 方法而不是 IEnumerable<T>。您可以通过将 ToArray 调用绑定到Select.)

【讨论】:

  • 十六进制实现最容易让其他语言使用它。谢谢!
【解决方案2】:

rsa.ToXmlString 会将您的密钥导出为 xml 文件。

否则,取字节数组并使用 Convert.ToBase64String 方法

这将为您提供关键参数的 base64 表示,应该能够被任何语言使用。

您还可能会发现 OpenSSLKey 库对于在不同语言之间使用 RSA 密钥很有用。 http://www.jensign.com/opensslkey/

【讨论】:

    【解决方案3】:

    转换为十六进制:

    Convert.ToString(Convert.ToInt32(theByteArray, 2), 16);
    

    【讨论】:

      猜你喜欢
      • 2020-12-24
      • 1970-01-01
      • 2013-09-25
      • 2015-04-09
      • 2017-02-06
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多