Hereigo
@Hereigo
Пишу на C# + Asp.Net (MVC) + .Net Core

Не выполняется проверка ЭЦП из 1С с помощью C#. В чём различия?

В C# не получается выполнить проверку ЭЦП наложенную в 1С. В шарпе пишу:
X509Certificate2 certificate = new X509Certificate2(fileP12, "PASSWORD");
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)certificate.PrivateKey;
var hash = sha1.ComputeHash(new UnicodeEncoding.GetBytes(input));
rsa.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"));

Пробовал подписывать и файл и строку. Всё работает. Но подпись сделанная программистом в 1С не совпадает.
Ключ один. Хэш "SHA1" у обоих. С кодировкой тоже поигрался... В чём могут быть различия?
  • Вопрос задан
  • 659 просмотров
Решения вопроса 1
bonv
@bonv
Ваш код на C# делает "голую" подпись.
Менеджер криптографиии в 1С создает подпись в формате PKCS7.

Соответственно в C# проверять нужно подпись в формате PKCS7 (CMS).
SignedCms.CheckSignature
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Hereigo
@Hereigo Автор вопроса
Пишу на C# + Asp.Net (MVC) + .Net Core
После продолжительных танцев с бубном и с огромной помощью от bonv, получилось следующее:
using System.Security.Cryptography.Pkcs;
// ...
ContentInfo contentInfo = new ContentInfo(Encoding.UTF8.GetBytes(INPUT_MSG));
SignedCms signedCms = new SignedCms(contentInfo, true);
signedCms.Decode(READ_FROM_1C_FILE_SIG);
signedCms.CheckSignature(true);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы