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

问题描述 投票:2回答:1

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

c# mono .net-3.5 cryptography sha1
1个回答
4
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.