gpt4 book ai didi

c# - 什么样的 RSASignaturePadding 与 PKCS#8 key 一起使用?

转载 作者:行者123 更新时间:2023-11-30 16:01:40 24 4
gpt4 key购买 nike

我正在尝试使用带有 RSA 的 SHA-256 使用 PKCS#8 key 对字符串进行签名。

RSACng.SignData()方法需要一个RSASignaturePadding,其选项为Pkcs1Pss。我找不到任何明确的信息告诉我哪个将用于 PKCS#8。

    // Decode Token (token is Base64 & PKCS8 encoded)
byte[] decodedKey = Convert.FromBase64String(myBase64String);
CngKey key = CngKey.Import(decodedKey, CngKeyBlobFormat.Pkcs8PrivateBlob);

// Build signature
string signature = "123abc";

byte[] bytes = Encoding.UTF8.GetBytes(signature);

// Sign signature using key & SHA256 w RSA
var unsigned = new RSACng(key);
byte[] data = unsigned.SignData(bytes, HashAlgorithmName.SHA256, <??????>);

密码学对我来说是全新的,所以如果我的方法有偏差,请告诉我。

最佳答案

PKCS#8 描述了一种编码/解码私钥的方法。如果此 key 是 RSA key ,则该 key 确实可用于生成 RSA 签名。

填充不需要任何特定的键属性。它只需要 key 的大小作为输入——对于 RSA——与模数大小相同(作为无符号数,以位为单位)。

对于 RSA 签名生成,随后的模幂总是相同的。它将填充的哈希值提高到私有(private)指数。因此,您可以选择要用于特定协议(protocol)的填充。

如果您不想指定协议(protocol),您可以查看 CMS(加密消息语法)——以前称为 PKCS#7。


在使用 PKCS#1 v1.5 填充的 RSA 的情况下,填充是确定性的,这使得整个 RSA 签名生成具有确定性。在 PSS 的情况下,它是一个非确定性操作,即涉及一个随机数生成器。较新的 PSS 具有比 PKCS#1 v1.5 更好的安全性证明,但 PKCS#1.5 并未被破解。

关于c# - 什么样的 RSASignaturePadding 与 PKCS#8 key 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38446477/

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