private static void EncodeIntBigEndian(BinaryWriter stream, byte[] value) { stream.Write((byte)2); UASecurity.EncodeLength(stream, value.Length); for (int index = 0; index < value.Length; ++index) { stream.Write(value[index]); } }
public static string ExportRSAPublicKey(RSAParameters parameters) { MemoryStream memoryStream1 = new MemoryStream(); using (StreamWriter streamWriter = new StreamWriter(memoryStream1)) { using (MemoryStream memoryStream2 = new MemoryStream()) { BinaryWriter stream1 = new BinaryWriter(memoryStream2); stream1.Write((byte)48); using (MemoryStream memoryStream3 = new MemoryStream()) { BinaryWriter stream2 = new BinaryWriter(memoryStream3); UASecurity.EncodeIntBigEndian(stream2, new byte[1]); UASecurity.EncodeIntBigEndian(stream2, parameters.Modulus); UASecurity.EncodeIntBigEndian(stream2, parameters.Exponent); UASecurity.EncodeIntBigEndian(stream2, parameters.Exponent); UASecurity.EncodeIntBigEndian(stream2, parameters.Exponent); UASecurity.EncodeIntBigEndian(stream2, parameters.Exponent); UASecurity.EncodeIntBigEndian(stream2, parameters.Exponent); UASecurity.EncodeIntBigEndian(stream2, parameters.Exponent); UASecurity.EncodeIntBigEndian(stream2, parameters.Exponent); int length = (int)memoryStream3.Length; UASecurity.EncodeLength(stream1, length); stream1.Write(memoryStream3.ToArray(), 0, length); } char[] charArray = Convert.ToBase64String(memoryStream2.ToArray(), 0, (int)memoryStream2.Length).ToCharArray(); streamWriter.WriteLine("-----BEGIN RSA PUBLIC KEY-----"); for (int index = 0; index < charArray.Length; index += 64) { streamWriter.WriteLine(charArray, index, Math.Min(64, charArray.Length - index)); } streamWriter.WriteLine("-----END RSA PUBLIC KEY-----"); } } return(Encoding.ASCII.GetString(memoryStream1.ToArray())); }