我使用此代码段查看DSA生成的私钥和公钥:
byte[] publicKey, hash, signedHash;
string strToSign = "Hello, world!";
SHA512Managed shaComputer = new SHA512Managed();
using (ECDsaCng dsaSigner = new ECDsaCng())
{
publicKey = dsaSigner.Key.Export(CngKeyBlobFormat.GenericPublicBlob);
Console.WriteLine($"DSA public key: {TransformHash(publicKey)}");
Console.WriteLine();
byte[] privateKey = dsaSigner.Key.Export(CngKeyBlobFormat.GenericPrivateBlob);
Console.WriteLine($"DSA private key: {TransformHash(privateKey)}");
Console.WriteLine();
}
但我看到这些键看起来非常相似,因为私钥以公钥开头:
这是正常的吗?
“因为私钥以公钥开头
我相信情况就是这样。这是针对GenericPrivateBlob
记录的:
通用私钥BLOB可以包含任何类型的私钥,并且不一定包含相应的公钥。只能通过检查BLOB来确定BLOB包含的密钥类型。
强调我的,但在这种情况下,看起来公钥似乎在私钥之前。