I create asymmetric key pair via RSACryptoServiceProvider . I get the key pair in byte[], so it can be saved. I'm avoiding the XML option, in order to avoid possible cross-platform encoding issues.
public byte[] CreateKeyPair()
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
//read the key pair in byte[]
RSAParameters rsaKeyPair = rsa.ExportParameters(true);
List<byte> keyPairList = new List<byte>();
foreach (byte b in rsaKeyPair.D) { keyPairList.Add(b); }
foreach (byte b in rsaKeyPair.DP) { keyPairList.Add(b); }
foreach (byte b in rsaKeyPair.DQ) { keyPairList.Add(b); }
foreach (byte b in rsaKeyPair.Exponent) { keyPairList.Add(b); }
foreach (byte b in rsaKeyPair.InverseQ) { keyPairList.Add(b); }
foreach (byte b in rsaKeyPair.Modulus) { keyPairList.Add(b); }
foreach (byte b in rsaKeyPair.P) { keyPairList.Add(b); }
foreach (byte b in rsaKeyPair.Q) { keyPairList.Add(b); }
return keyPairList.ToArray();
}
now I want to convert from byte[] back to RSACryptoServiceProvider.
My question is, are all the fields of fixed size every time, and if so what size is each field, or should I delimit those somehow?
What if I serialize RSAParameters , will someone be able to easily deserialize/read the struct in C++? I think not, but worth asking anyway...