使用预先存在的私钥对文件签名以创建证书(C#)

时间:2018-09-19 10:41:00

标签: c# .net encryption rsa encryption-asymmetric

我已经阅读了关于StackOverflow的所有文章,尽管其中有许多文章都接近于我想要的解决方案,但似乎都没有用。

我只是想利用一个现有的私钥来创建一段数据的签名。然后,它成为数据文件的一部分,该文件包括描述所用参数的标头。接下来是数据文件的签名版本,最后是数据文件本身(十六进制文件)。文件的合并不是问题,使用我拥有的私钥和公钥对生成证书是没有问题的。密钥的格式为(“ ----- BEGIN PRIVATE KEY -----”),我可以很容易地从头开始生成签名文件,但是读取最终文件的软件期望使用256 bye签名,而我的(使用RSA-256)仅产生32个字节的签名。它只能访问公用密钥以解密和验证文件签名。

我遇到了许多错误,例如键集无效,不存在,ComputeHash函数无法正常工作并导致崩溃。我怀疑我需要通过CSPParameters向我的RSACryptographicService提供更多信息,但是不确定这样做是否必要和足够。 我想避免深入研究算法背后的数学原理,例如手动设置/读取模数/ P / Q值等。有人可以提出一种简单的方法来做到这一点,或者告诉我我要去哪里了吗?代码可根据要求提供。

1 个答案:

答案 0 :(得分:2)

您得到的评论说256字节签名太长是荒谬的。忽略那些。

256位(32字节)将是一个很小的签名,这是不正确的。我相信您真正要寻找的是2048位(256字节)RSA签名。按照当今的标准,这些设置更为明智(尽管增大一点不会造成伤害)。

就导入密钥而言,而不是手动设置密钥组件,应查看“ PEM”格式的RSA密钥。有几个nuget软件包可以处理它们。否则,您可以剥离页眉/页脚并自行解码base64,并使用一些内置的X509类导入关键组件。

.NET本身不支持PEM格式密钥,因此,我建议使用信誉良好的加密库,例如BouncyCastle,因为它们在其RSA算法中支持PEM密钥解析。

此现有的stackoverflow链接描述了如何在BouncyCastle中导入密钥: Reading PEM RSA Public Key Only using Bouncy Castle