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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mono不会将SHA1识别为RSA签名的哈希算法相关的知识,希望对你有一定的参考价值。

我正在尝试将一些代码从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");

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

这是Mono的source code

答案

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

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

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

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

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

以上是关于Mono不会将SHA1识别为RSA签名的哈希算法的主要内容,如果未能解决你的问题,请参考以下文章

iOS小技能:RSA签名算法和加密算法的实现

iOS小技能:RSA签名算法和加密算法的实现

iOS小技能:RSA签名算法和加密算法的实现

SHA1 算法

支付宝签名

SHA1 安全哈希算法(Secure Hash Algorithm)