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

本文关键字:哈希 算法 RSA 不将 SHA1 识别 Mono | 更新日期: 2023-09-27 18:30:07

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

单声道输出此错误:

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

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

byte[] bytesSing = rsa.SignHash(hashValue, "SHA1");

检查了VS2010,参考说它一定是一个字符串,我将其作为"SHA1"传递。它在Windows下编译和运行,但不在Mono下编译或运行。

这是Mono的源代码。

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

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

Mono 文档支持这一点,将该参数记录为:

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

Microsoft实现通过X509Utils.NameOrOidToAlg查找参数,这可能接受名称或OID。

因此,要使其正常工作,您应该能够在Mono版本中传递null,或者传递OID"1.3.14.3.2.26"。