Невозможно проверить подпись PyOpenSSL в C #

Я могу подписывать и проверять данные на PHP с помощью OpenSSL:

function generate_signature($privateKey, $data) { $keyData = openssl_get_privatekey($privateKey); openssl_sign($data, $signature, $keyData, OPENSSL_ALGO_SHA256); openssl_free_key($keyData); $sigText = base64_encode($signature); return $sigText; } function verify_signature($pubKey, $sigText, $data) { $signature = base64_decode($sigText); $keyData = openssl_get_publickey($pubKey); $ok = openssl_verify($data, $signature, $keyData, "sha256WithRSAEncryption"); openssl_free_key($keyData); return $ok; } $privateKey= file_get_contents("private.key"); $pubKey = file_get_contents("public.pem"); $data = "This is a test"; $sigText = generate_signature($privateKey, $data); $result = verify_signature($pubKey, $sigText, $data); 

Это отлично работает для любых значений данных, которые я пытаюсь выполнить. $result всегда верно.

Однако, когда я пытаюсь проверить подпись на C # с помощью API BouncyCastle, она всегда терпит неудачу:

 public static bool VerifySignature(string data, string signatureText) { // Using statements and error checking removed for brevity var uri = new Uri("pack://application:,,,/Resources/public.pem"); var resourceStream = Application.GetResourceStream(uri); var reader = new StreamReader(resourceStream.Stream); PemReader pemReader = new PemReader(reader); RsaKeyParameters parameters = (RsaKeyParameters)pemReader.ReadObject(); RSACryptoServiceProvider provider = (RSACryptoServiceProvider)RSACryptoServiceProvider.Create(); RSAParameters rParams = new RSAParameters(); rParams.Modulus = parameters.Modulus.ToByteArray(); rParams.Exponent = parameters.Exponent.ToByteArray(); provider.ImportParameters(rParams); byte[] sigBytes = Convert.FromBase64String(signatureText); byte[] dataBytes = Encoding.UTF8.GetBytes(data); bool isValid = provider.VerifyData(dataBytes, CryptoConfig.MapNameToOID("SHA256"), sigBytes); return isValid; } 

Независимо от того, что я пытаюсь, isValid всегда ложь. Я пробовал использовать SHA1 на обоих концах вместо SHA256, я пробовал разные кодировки, я попытался изменить различные байтовые массивы на случай, если возникли некоторые проблемы с endian, но независимо от того, что я пытаюсь, я не могу проверить PHP подпись. Я явно пропускаю что-то на стороне C #, но я не знаю, что.