Убедитесь, что в обоих случаях используется одна и та же схема подписи.SHA256 не является схемой подписи.Это просто алгоритм создания вашего дайджеста для подписи.На основе OpenSSL CLI wiki (https://wiki.openssl.org/index.php/Command_Line_Utilities)) алгоритм подписи определяется типом ключа подписи (RSA, DSA и т. Д.). Если вы используете ключ RSA, по умолчанию используется схема pkcs # 1 v1.5.
Я не эксперт по C #, поэтому могут быть более эффективные способы подписывания PKCS # 1 v1.5, но я обнаружил RSAPKCS1SignatureFormatter после быстрого поиска в Google (https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsapkcs1signatureformatter?view=netframework-4.7.2). Этот класскажется, работает вместе с RSACryptoServiceProvider , который вы уже используете.
Пример от Microsoft:
using System;
using System.Security.Cryptography;
class RSASample
{
static void Main()
{
try
{
//Create a new instance of RSACryptoServiceProvider.
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
//The hash to sign.
byte[] hash;
using (SHA256 sha256 = SHA256.Create())
{
byte[] data = new byte[] { 59, 4, 248, 102, 77, 97, 142, 201, 210, 12, 224, 93, 25, 41, 100, 197, 213, 134, 130, 135 };
hash = sha256.ComputeHash(data);
}
//Create an RSASignatureFormatter object and pass it the
//RSACryptoServiceProvider to transfer the key information.
RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(rsa);
//Set the hash algorithm to SHA256.
RSAFormatter.SetHashAlgorithm("SHA256");
//Create a signature for HashValue and return it.
byte[] SignedHash = RSAFormatter.CreateSignature(hash);
}
}
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
}
}
}
РЕДАКТИРОВАТЬ: После дальнейшей проверкиВ C # документах вы можете попытаться внести незначительные изменения в ваш текущий фрагмент кода. Третий параметр для SignData()
- это RSASignaturePadding
, и вы можете попытаться указать для него RSASignaturePadding.Pkcs1
(https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsasignaturepadding?view=netframework-4.7.2)
В основном ваша вторая последняя строка кода будет выглядеть так:
byte[] sig = privKey.SignData(Encoding.ASCII.GetBytes(signingString), CryptoConfig.MapNameToOID("SHA256"), RSASignaturePadding.Pkcs1);