C# (.NET 4.8) – проверка подписи с помощью открытого ключаC#

Место общения программистов C#
Ответить
Anonymous
 C# (.NET 4.8) – проверка подписи с помощью открытого ключа

Сообщение Anonymous »

Мне нужно проверить подпись веб-перехватчика JSON. В документации есть только пример на JavaScript, как это сделать:

Код: Выделить всё

const crypto = require("crypto");
const fs = require('fs');

const publicKey = fs.readFileSync('publicKey.pem', 'utf-8');
const payload = fs.readFileSync('payload.json', 'utf-8');
const signature = fs.readFileSync('signature.txt', 'utf-8');

function verify(publicKey, signature, payload) {
const verifier = crypto.createVerify("RSA-SHA256");
verifier.update(payload);

return verifier.verify(
{ key: publicKey, padding: crypto.constants.RSA_PKCS1_PSS_PADDING },
Buffer.from(signature, 'base64')
);
}

const verified = verify(publicKey, signature, payload);

console.log('Signature Verified: ', verified);
Приведенный выше код печатает «истину» в журнале консоли. Я пытаюсь смоделировать то же самое на C#, и он всегда возвращает false:

Код: Выделить всё

private static bool VerifySignature(string publicKeyPath, string payload, string signature)
{
byte[] byteToSign = Encoding.UTF8.GetBytes(payload);
byte[] bsign = Convert.FromBase64String(signature);

string pemText = File.ReadAllText(publicKeyPath);
PemReader pr = new PemReader(new StringReader(pemText));
AsymmetricKeyParameter publicKey = (AsymmetricKeyParameter)pr.ReadObject();
RSAParameters rsaParams = DotNetUtilities.ToRSAParameters((RsaKeyParameters)publicKey);

RSACryptoServiceProvider cryptoServiceProvider = new RSACryptoServiceProvider();
cryptoServiceProvider.ImportParameters(rsaParams);

bool result = cryptoServiceProvider.VerifyData(byteToSign, bsign, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

return result;
}
Я пробовал разные подходы на C#, приведенный выше выглядит чище и короче, чем другие. Что я делаю не так? Обратите внимание, что я использую .NET 4.8, поэтому у меня нет таких методов, как RSACryptoServiceProvider.ImportFromPem, которые доступны только в версии 5. Спасибо

Подробнее здесь: https://stackoverflow.com/questions/788 ... public-key
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»