Mono 无法将 SHA1 识别为 RSA 签名的哈希算法

Gla*_*las 2 c# mono cryptography sha1 .net-3.5

我正在尝试将一些代码从 C# 移植到 Mono 以用于未来的 Linux 项目。

Mono 输出此错误:

A System.Security.Cryptography.CryptographyException was thrown; sha1 is an unsupported hash algorithm for RSA signing"

运行或调试此代码以进行 RSA 签名时:

byte[] bytesSing = rsa.SignHash(hashValue, "SHA1");
Run Code Online (Sandbox Code Playgroud)

我检查了 VS2010,参考文献说它必须是一个字符串,我将其作为“SHA1”传递。这在 Windows 下编译和运行,但不能在 Mono 下编译或运行。

这是 Mono 的源代码

pmc*_*ane 5

根据您链接的源代码文件,该SignHash函数假定您传递的字符串是一个 OID,并尝试在其GetHashNameFromOID正上方的函数中进行查找。

单文档支持此,记录该参数为:

用于创建数据哈希值的哈希算法标识符 (OID)。

微软实现看起来参数向上穿过X509Utils.NameOrOidToAlg,这可能可以接受的名称或OID。

所以为了让它工作,你应该能够传递nullMono 版本,或者传递 OID“1.3.14.3.2.26”。