Подпись с RSA-SHA256 - PullRequest
       11

Подпись с RSA-SHA256

2 голосов
/ 17 января 2020

Со вчерашнего дня я пробовал множество «решений» в StackOverflow, но ни одно из них, похоже, не работает. При наличии сертификата .pfx с закрытым ключом мне нужно подписать байтовый массив (версию прошивки используемого нами устройства отслеживания). Вот что я пробовал:

private byte[] generateSignature(byte[] data, X509Certificate2 certificate)
    {
        RSACryptoServiceProvider key = new RSACryptoServiceProvider();
        key.FromXmlString(certificate.PrivateKey.ToXmlString(true));

        return key.SignData(data, CryptoConfig.MapNameToOID("SHA256"));
}

А также:

private byte[] generateSignature(byte[] data, X509Certificate2 certificate)
    {
        string alg = CryptoConfig.MapNameToOID("SHA256");

        RSACryptoServiceProvider rsaProvider = (RSACryptoServiceProvider)certificate.PrivateKey;

        return rsaProvider.SignData(orig, alg);
}

А также:

private byte[] generateSignature(byte[] data, X509Certificate2 certificate)
{
    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
    {
            byte[] hash;
            using (SHA256 sha256 = SHA256.Create())
            {
                hash = sha256.ComputeHash(data);
            }

            RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(rsa);


            RSAFormatter.SetKey(certificate.PrivateKey);

            RSAFormatter.SetHashAlgorithm("SHA256");


            return RSAFormatter.CreateSignature(hash);
}

И наконец:

private byte[] generateSignature(byte[] data, X509Certificate2 certificate)
{
        RSACryptoServiceProvider csp = (RSACryptoServiceProvider)certificate.PrivateKey;
        SHA1Managed sha1 = new SHA1Managed();
        SHA256Managed sha256 = new SHA256Managed();

        byte[] hash = sha256.ComputeHash(data);

        csp.SignHash(hash, CryptoConfig.MapNameToOID("SHA256"));
}

На все это я получаю сообщение об ошибке:

System.Security.Cryptography.CryptographicException: 'Указан неверный алгоритм.'

Я знаю, что мой ключ 256ha sh совместимо, потому что я использовал команду:

openssl x509 -in C:\cert.pfx -text -noout

А алгоритм подписи был sha256WithRSAEncryption.

...