У нас есть служба подписи, которая принимает хэш sha256 в качестве входных данных и подписывает хеш с использованием библиотек pkcs11 и bouncy castle в C #, кодирует подписанный дайджест в Bae64 и отправляет его запрашивающей стороне. Итак, по сути мы генерируем хеш хеша и подписываем хеш.
Запрашивающая сторона на другом конце, чтобы проверить это, декодирует полученный дайджест base64 и проверяет его. Я использовал библиотеку .NET на моем конце в PowerShell и реализовал процесс проверки, который проверяет. пожалуйста, смотрите ниже.
## Load a certificate Public key and verify
$certusedforsigning = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2
$certusedforsigning.Import($signingcertificate)
$certusedforsigning.PublicKey.key -as [System.Security.Cryptography.RSACryptoServiceProvider] | Out-null
$oid = [System.Security.Cryptography.CryptoConfig]::MapNameToOID('SHA256')
$padding = [System.Security.Cryptography.RSASignaturePadding]::Pkcs1
$result = $certusedforsigning.PublicKey.key.Verifyhash($originalhashinBinary,$signedbinary,'SHA256',$padding)
$result
if($result -eq 'True' ) { write-host 'Signature verified True'} else { write-host 'Signature validation Failed'}
}
}
Теперь, чтобы обойти хэширование, мы шифруем полученный хэш sha256, используя закрытый ключ RSA. Теперь я предполагаю, что мне нужно использовать открытый ключ для расшифровки хэша, сгенерировать хэш sha256 исходного сообщения и сравнить их для проверки.
Есть ли метод или функция, доступная в .NET, которая позволяет мне это делать? Могу ли я сделать это с помощью OpenSSL? Не могли бы вы указать мне, как выполнить проверку такого сообщения, как описано выше. спасибо.