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