【发布时间】:2018-12-10 09:20:40
【问题描述】:
我们有一个签名服务,它接受 sha256 哈希作为输入,并使用 pkcs11 对哈希进行签名,C# 中的充气城堡库将签名摘要编码为 Bae64,并将其发送给请求者。所以,本质上我们是在生成一个散列的散列并对散列进行签名。
另一端的请求者为了验证这一点,对接收到的 base64 摘要进行解码并进行验证。我在 PowerShell 中使用了一个 .NET 库,并实现了一个验证过程。请看下文。
## 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'}
}
}
现在,为了绕过散列散列,我们使用 RSA 私钥对接收到的 sha256 散列进行加密。现在我假设我需要使用公钥解密哈希,生成原始消息的 sha256 哈希并比较两者以验证。
.NET 中是否有可以让我这样做的方法或函数?我可以使用 OpenSSL 完成此操作吗?你能告诉我如何完成上述验证这样的消息吗?谢谢。
【问题讨论】:
-
*.com/questions/17128038/… 检查这是否解决了您的问题。
-
@DhanushkaDolapihilla 我不明白这将如何回答这个问题。
标签: c# powershell cryptography rsa signing