gpt4 book ai didi

c# - RSA公钥解密c#(powershell)

转载 作者:行者123 更新时间:2023-11-30 17:29:27 25 4
gpt4 key购买 nike

我们有一个签名服务,它接受 sha256 哈希作为输入,并使用 pkcs11 和 bouncy caSTLe 库对哈希进行签名,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 完成此操作吗?你能告诉我如何完成验证如上所述的消息吗?谢谢。

最佳答案

通常使用私钥加密的定义不明确。有两种 PKCS#1 v1.5 填充方法:一种用于签名(使用私钥),一种用于加密(使用公钥)。所以这取决于使用哪种填充方法的实现。

假设使用了用于签名的那个。检查这个很容易:只需在相同数据上重新生成签名即可。如果它与前一个相同,则选择用于签名的填充(PKCS#11 实现根据 key 类型选择)。

要验证签名,您只需对数据进行哈希处理,然后执行签名验证(在 C# 中可以包括哈希)并根据 base 64 解码签名值进行验证。除此之外不需要特定的魔法。

如果使用非确定性加密方案,那么您可能需要重新考虑您的协议(protocol)。 RSA 填充是 RSA 密码系统提供的安全性的核心。

关于c# - RSA公钥解密c#(powershell),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51131222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com