public void GenerateKey(Int32 keySize) { // 生成密钥 var ks = ECDsaHelper.GenerateKey(keySize); Assert.NotNull(ks); Assert.Equal(2, ks.Length); //var magic = ks[0].ToBase64().ReadBytes(0, 4).ToInt(); //var magic2 = ks[1].ToBase64().ReadBytes(0, 4).ToInt(); { // 重新导入 var data = ks[0].ToBase64(); var key = CngKey.Import(data, CngKeyBlobFormat.EccPrivateBlob); var ec = new ECDsaCng(key); // 解码KeyBlob格式 var eckey = new ECKey(); eckey.Read(data); Assert.Equal(data.ToBase64(), eckey.ToArray().ToBase64()); // 幻数(4) + 长度len(4) + X(len) + Y(len) + D(len) Assert.Equal($"ECDSA_PRIVATE_P{keySize}", eckey.Algorithm); // 构造参数 var ecp = eckey.ExportParameters(); // 再次以参数导入,然后导出key进行对比 var ec2 = new ECDsaCng(); ec2.ImportParameters(ecp); var key2 = ec2.Key.Export(CngKeyBlobFormat.EccPrivateBlob).ToBase64(); Assert.Equal(ks[0], key2); } { // 重新导入 var data = ks[1].ToBase64(); var key = CngKey.Import(data, CngKeyBlobFormat.EccPublicBlob); var ec = new ECDsaCng(key); // 解码KeyBlob格式 var eckey = new ECKey(); eckey.Read(data); Assert.Equal(data.ToBase64(), eckey.ToArray().ToBase64()); // 幻数(4) + 长度len(4) + X(len) + Y(len) + D(len) Assert.Equal($"ECDSA_PUBLIC_P{keySize}", eckey.Algorithm); // 构造参数 var ecp = eckey.ExportParameters(); // 再次以参数导入,然后导出key进行对比 var ec2 = new ECDsaCng(); ec2.ImportParameters(ecp); var key2 = ec2.Key.Export(CngKeyBlobFormat.EccPublicBlob).ToBase64(); Assert.Equal(ks[1], key2); } }