我正在尝试将prime192v1私钥加载到C#中并签署一些数据,但没有得到与openssl相似的结果

时间:2019-10-30 17:51:34

标签: c# encryption openssl digital-signature

我有一个在OpenSSL中创建的pem文件。我需要使用私钥对一些十六进制数据进行签名。我认为我的所有功能都非常接近功能,但是我似乎无法从openssl返回的代码中获得类似的数据。

这是我尝试在C#中重现的功能

openssl dgst -sha256 -sign c:\openssl\privateKey.pem c:\openssl\msgtosign.bin > c:\openssl\msgsig.bin

privateKey.pem包含以下内容

-----BEGIN EC PARAMETERS-----
BggqhkjOPQMBAQ==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MF8CAQEEGETOBCEpn9vbZUN8k+LfLfo9zlLPovGL9KAKBggqhkjOPQMBAaE0AzIA
BB/Kr/mLSNrJnONbc5EADZHTVLTesmlyLmGgLUaliztkVrma88eE3Jsg3EiZMq7S
+A==
-----END EC PRIVATE KEY-----

msgtosign.bin包含以下十六进制数据

04 9E 00 32 F9 45 84 01 54 52 49 31 02 00 10 20 00 00 00 07 65 43 21 00 00 00 00 00 00 00 00 00 00 00 10

OpenSSL响应的信息与此类似:

30 36 02 19 00 AC 88 C8 D3 BC C9 C5 21 FE D1 A1 10 B7 4E F0 87 0A 1B 11 83 CA 8F 67 09 02 19 00 B5 62 E4 24 79 BB 42 CA AC 8D 94 4D F2 19 1A 2D 5F 8D BC D9 F7 7B CD 09

我当前使用的代码会产生此输出

B8 04 BB 27 5A 68 37 6D 9D BA 34 64 79 84 FE 4A 9C 86 2A 46 33 A1 26 56 B9 39 7E 07 2B F9 26 A6 A6 15 AE A5 96 2D 49 35 E0 8D 0D 92 8F FE 01 50

通过此代码

            var pem = "MF8CAQEEGETOBCEpn9vbZUN8k+LfLfo9zlLPovGL9KAKBggqhkjOPQMBAaE0AzIABB/Kr/mLSNrJnONbc5EADZHTVLTesmlyLmGgLUaliztkVrma88eE3Jsg3EiZMq7S+A==";
            var derArray = Convert.FromBase64String(pem);
            var ecdsa = ECDsa.Create(ECCurve.CreateFromOid(new Oid("1.2.840.10045.3.1.1")));
            ecdsa.ImportECPrivateKey(derArray, out _);
            var signedData = ecdsa.SignData(File.ReadAllBytes(@"C:\OpenSSL\msgtosign.bin"), HashAlgorithmName.SHA256);

0 个答案:

没有答案