Първо, аз все още съм нов в крипто/подписването, така че имайте търпение при злоупотреба с термини, моля.
Трябва да създам подпис в C#, който се проверява от библиотека на Python. В Python това е проста част от код за декодиране/проверка на подписа:
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
public_key.verify(signature, payload_contents,
padding.PSS(mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH,
), hashes.SHA256(), )
Текущият ми C# код изглежда така:
private static string CreateSignature(byte[] data, string privateKeyFileLocation)
{
var cert = new X509Certificate2(privateKeyFileLocation);
byte[] signedBytes;
using (var rsa = cert.GetRSAPrivateKey())
{
signedBytes = rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pss);
}
var finalString = Convert.ToBase64String(signedBytes);
return finalString;
}
Подписът обаче не преминава проверката за проверка в кода на Python. Изглежда, че PSS подплънките в .Net библиотеките по подразбиране използват MGF1. Вярвам обаче, че имам проблеми поради функцията за генериране на маска (MGF1), използваща 256-битов хеш в кода на Python, но по подразбиране SHA1 в C#. Прегледах документацията на .Net C# и изглежда, че няма начин да отменя това. Разгледах C# документацията на Bouncy Castle и просто имам проблеми с намирането на какъвто и да е подобен пример за това как да задам padding с персонализирани параметри. Някой има ли опит в тази област и може ли да даде няколко съвета?
PssSigner(IAsymmetricBlockCipher cipher, IDigest contentDigest, IDigest mgfDigest, int saltLen)
а>). В мрежата можете също да намерите примери, напр. тук. Но не го пробвах. - person user 9014097   schedule 21.10.2020