【发布时间】:2017-09-03 20:50:51
【问题描述】:
我编写了以下代码来提取 ECDH 公钥 blob:
var curve = ECCurve.NamedCurves.nistP256;
ECDiffieHellman ecdh = ECDiffieHellman.Create(curve);
var bytes = ecdh.PublicKey.ToByteArray();
Console.WriteLine($"Public Key (byte length with format info): {bytes.Length}");
var hexString = BitConverter.ToString(bytes).Replace("-", string.Empty);
Console.WriteLine($"Public Key (hex with format info): {hexString}");
我得到以下输出:
公钥(带格式信息的字节长度):72
-
公钥(十六进制格式信息):45434B3120000000C3F1AC1F3D272BE14A26BE35B1A31F6C06BEBE6AE977809984FC509D5201C50909989259209984FC50909989259207998920C50980998CS
前 4 个字节(密钥类型)是 45434B31(十六进制格式)。这似乎是大端格式,this MSDN link 表示它应该是小端格式,这表明这 4 个字节应该是 314B4345(再次,如链接所示)。该链接还使用“魔术”,而不是“键类型”。接下来的 4 个字节是 20000000(十六进制格式)似乎是小端格式(如上面的链接所述)。
对于为什么键类型被格式化为大端有一个合乎逻辑的解释吗?还是我在这里遗漏了什么?
【问题讨论】:
-
Little-endian 表示最低有效字节(0x45)在前。
标签: .net encryption cryptography elliptic-curve