我通过RSACryptoServiceProvider
创建非对称密钥对。我在byte[]
中获得密钥对,因此可以保存。我避免使用XML选项,以避免可能的跨平台编码问题。
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();
}
现在我想将byte[]
转换回RSACryptoServiceProvider
。
我的问题是,每次都是固定大小的所有字段,如果是这样,每个字段的大小是多少,还是应该以某种方式划分它们?
如果我序列化RSAParameters
怎么样,有人能够在C ++中轻松地反序列化/读取结构吗?我想不是,但无论如何都值得问......