我正在尝试将一些代码从 C# 移植到 Mono,以用于 future 的 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");
我检查了VS2010,引用文献说它必须是一个字符串,我将其作为“SHA1”传递。它在 Windows 下编译并运行,但在 Mono 下不编译或运行。
这是 Mono 的 source code .
最佳答案
根据您链接的源代码文件,SignHash
函数假定您传递的字符串是 OID,并尝试在 GetHashNameFromOID
中查找它。 code> 直接在它上面的函数。
Mono documentation支持这一点,将该参数记录为:
The hash algorithm identifier (OID) used to create the hash value of the data.
Microsoft implementation通过 X509Utils.NameOrOidToAlg 查找参数,它可能接受名称或 OID。
因此,要使其正常工作,您应该能够在 Mono 版本中传递 null
,或传递 OID“1.3.14.3.2.26”。
关于c# - Mono 无法将 SHA1 识别为 RSA 签名的哈希算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26895308/