RSA - 导出不同语言的公钥

时间:2010-11-16 16:46:01

标签: c# cryptography rsa

我正在使用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的结果是字节数组。如何将指数转换为可以用其他语言解析的字符串。我见过的其他语言的样本似乎是

3 个答案:

答案 0 :(得分:2)

您可以使用普通十六进制字符串或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>。您可以通过抽取{{{}}来轻松完成此操作。 {1}}拨打ToArray。)

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

转换为十六进制:

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