使用自己的十六进制编码的 RSA 参数对文档进行签名



我想问关于 C# 上的 RSA 符号的问题。

我有一份文件要签署。我有模数、私人指数和公共指数的普通十六进制值。我不想使用随机生成的密钥进行签名。当我尝试使用带有签名工具的签名时,我得到了完美的结果。但我不能用 C# 做到这一点。我是这种问题的新手。所以我真的很卡住。

我看了很多网站和北极,但我找不到任何解决方案。也许有,但我无法得到它,我不知道。

如果你能详细地向我解释(一步一步(,我将不胜感激。

在 .NET 中,您需要私钥的完整 CRT 参数集,因此如果您有 D,则还需要 P、Q、DP、DQ 和 InverseQ。

RSAParameters rsaParams = new RSAParameters();
rsaParams.Modulus = ParseHex(modulus);
rsaParams.Exponent = ParseHex(exponent);
rsaParams.D = ParseHex(d, rsaParams.Modulus.Length);
rsaParams.P = ParseHex(p, (rsaParams.Modulus.Length + 1) / 2);
rsaParams.Q = ParseHex(q, rsaParams.P.Length);
rsaParams.DP = ParseHex(dp, rsaParams.P.Length);
rsaParams.DQ = ParseHex(dq, rsaParams.P.Length);
rsaParams.InverseQ = ParseHex(inverseQ, rsaParams.P.Length);
RSA rsa = RSA.Create();
rsa.ImportParameters(rsaParams);

其中ParseHex(string str, int len=-1)是一个例程,它将十六进制字符串解析为固定长度的数组(如果十六进制字符串很短,则应用 0 字节值左填充数组(。

最新更新