【发布时间】:2019-10-11 13:56:17
【问题描述】:
我需要使用MD5 和SHA1 哈希的组合来RSA sign 一些数据。我可以很容易地为其中一个或另一个做到这一点,但组合起来很棘手。这是针对DTLS 1.0 中的certificate verify 消息,所以不幸的是我不能只选择做一个。
我相信这些步骤是在MD5 中散列,然后在SHA1 中散列并连接。然后我需要用私钥加密。这就是我卡住的地方。
我有一个RSACryptoServiceProvider,它有正确的私钥(它不可导出)。我知道我做不到
rsa.SignHash(hash, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
因为它不仅仅是一个 SHA1 哈希,所以这个函数认为哈希是无效的,因为它是 36 字节而不是预期的 20 字节。
我也知道我做不到
rsa.SignData(hash, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
因为那会再次散列。
我相信我与
rsa.Encrypt(hash, RSAEncryptionPadding.Pkcs1);
但是,这是使用公钥而不是我需要的私钥。
关于如何使用私钥加密或使用 MD5+SHA1 进行签名的任何建议?
【问题讨论】:
-
似乎不受支持。您必须使用BigInteger 编写您自己的代码。听起来很可怕。祝你好运。
-
所以我实际上看到了另一个问题,但问题是私钥不可导出,所以我无法访问指数或模数stackoverflow.com/questions/19407581/…
-
微软的示例代码真的很糟糕。您需要在加密和解密时添加相同的私钥,并仅示例如何生成随机密钥。请参阅以下内容:docs.microsoft.com/en-us/dotnet/standard/security/…
-
所以创建一个可导出的新私钥。如果您关闭所有解决问题的途径,那么您将无法解决问题。
-
这不是我的钥匙,我无法控制。没有别的办法了吗?
标签: c# rsa md5 digital-signature sha1