У меня есть файл pem, который был создан в OpenSSL. Мне нужно использовать закрытый ключ для подписи некоторых шестнадцатеричных данных. Я думаю, что у меня все очень близко к функционалу, но я не могу получить аналогичные данные из моего кода, который возвращает 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);