我正在尝试验证ENC(电子航海图)的签名。使用带有SHA1的DSA使用证书对文件进行签名。
单个ENC的签名文件如下所示
//签名部分R:
0DA3 AFDB CE55 B926 00D6 D97A ADE2 CAAF 8AD1 51C3。
//签名部分S:
1A25 7FDD B1E9 FE28 AE12 15CE 4DF8 7616 3E32 4312。
//签名部分R:
53AA DA93 CEA4 162D 01A1 BDB3 2A66 D9A7 9D4A 02F8。
//签名部分S:
7DF3 9C2C EB93 73C6 CC2C 65A1 AE7C C7D6 5BCB BFBA。
// BIG p
FCA6 82CE 8E12 CABA 26EF CCF7 110E 526D B078 B05E DECB CD1E B4A2 08F3 AE16 17AE 01F3 5B91 A47E 6DF6 3413 C5E1 2ED0 899B CD13 2ACD 50D9 9151 BDC4 3EE7 3759 2E17。
// BIG q
962E DDCC 369C BA8E BB26 0EE6 B6A1 26D9 346E 38C5。
// BIG g
6784 71B2 7A9C F44E E91A 49C5 147D B1A9 AAF2 44F0 5A43 4D64 8693 1D2D 1427 1B9E 3503 0B71 FD73 DA17 9069 B32E 2935 630E 1C20 6235 4D0D A20A 6C41 6E50 BE79 4CA4。
// BIG y </ p>
AA25 DF9E C3CA 96B7 9D01 3ED8 D572 D47C B3F3 80D0 731D EA47 B106 26BA C387 C1FA 3C33 EC55 6845 3744 76BE 5825 6E07 A74D 607F 7A5E 7B7E 3455 71D8 2110 4C8A C4BF。
以下文字摘自IHO S-63规格。 The full PDF linked here.
5.4.2.7 ENC签名文件格式
签名文件必须包含签名和证书对。仅具有签名的文件无效,因为它不认证数据服务器的身份。 ENC数字签名文件的格式,结构和顺序如下例所示:
第二个R和S对用于验证数据服务器数字证书(p,q,g和y字符串)。如果验证成功,则可以提取数据服务器公钥(y字符串)并用于验证加密的ENC的数字签名(第一个R和S对)。这允许数据客户端验证SA数字证书,提取数据服务器公钥,以及验证ENC数据的数字签名。
从现有实现转换而来的代码执行以下操作:
初始化一个新的DSACryptoServiceProvider,其字节数组值为p,q,g和y(空格和尾部。已删除)
将签名文件的BIG P,Q,G和Y部分(包括标题)作为字节数组读取,然后SHA1。清除数组。
获取以下字符串的字节数组
var asn = string.Format("{0}{1}{2}{3}", "302E021500", rPart, "021500", sPart);
并致电
dsa.VerifySignature(hashedPQGY,asn);
可以说我没有设法验证p,q,g和y。有人可以指出一个很好的文档来源,例子,或者只是解释我缺少的东西。
谢谢,Ben。
答案 0 :(得分:1)
您的总长度指标为2E,即46。
这是对的吗?通常我认为这将是2C或2D。
我家里有一些C#代码可以做你想做的事。
否则check this out;它显示了如何生成签名而不是验证它,但它可能有所帮助。