.net core 验证收到的消息的SHA256签名

.net core 验证收到的消息的SHA256签名,.net-core,cryptography,azure-functions,.net Core,Cryptography,Azure Functions,我需要验证SHA256签名,我们在每次通信中都会收到消息、签名和公钥 我正在尝试将Azure函数(.net core 3.1)中收到的公钥加载到X509Certificate2对象中,以便能够验证收到的消息的签名和签名 使用以下代码: string requestBody=等待新的StreamReader(req.Body).ReadToEndAsync(); var data=JsonConvert.DeserializeObject(requestBody); var keyBytes=Co

我需要验证SHA256签名,我们在每次通信中都会收到消息、签名和公钥

我正在尝试将Azure函数(.net core 3.1)中收到的公钥加载到X509Certificate2对象中,以便能够验证收到的消息的签名和签名

使用以下代码:

string requestBody=等待新的StreamReader(req.Body).ReadToEndAsync();
var data=JsonConvert.DeserializeObject(requestBody);
var keyBytes=Convert.FromBase64String(data.key);
X509Certificate2证书=新的X509Certificate2(密钥字节);
激发最后一条语句时,出现以下异常:

   at Internal.Cryptography.Pal.CertificatePal.FromBlobOrFile(Byte[] rawData, String fileName, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
   at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(Byte[] data)
   at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData)
   at leo_signing_library.Function1.<Run>d__0.MoveNext() in 
C:\Users\Leo\source\repos\leo-signing-library\Function1.cs:line 30
为清晰起见,请查看调试窗口的屏幕截图:

我添加了nuget包
System.Security.Cryptography.X509Certificates
(版本4.3.2),但没有效果

有人知道如何克服这个问题吗?或者有一个基于公钥验证签名的工作示例没有存储在证书存储中

编辑1: 我正在尝试加载以下公钥:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1iyta8F+SLHhbfy+f7fL
8LrsS1LKs05UaHm6muOTlzIdSDwo4dNiWg6rbiL2v4IwpglgL8kvbXLZ8Z3/E6Uu
uUi/IW1Hakgx65Qy4LkGxsnZ/jnLu3DxfY9xycMYq9TfNxIIvFPkbEJY/pwGjZ+q
13WegTJG7m+tqf5GbA3xTLz2DSHXPc7y77OnsDawHsOEou9IZZQCdxCg3L186gU4
yj6mC07Eop3lKMjsqNAXdVmnzcUc+PixQFCSjOcL9Fpbq+aHyYW+Pk9h5dWCGGNQ
wixTIJKTeDxAEkbZ2eLuqQZOCNbkHBn9x+IBxeKMmsmRg/J4/QqwCm+t+wd4VNAJ
ewIDAQAB
-----END PUBLIC KEY-----

欢迎来到StackOverflow。您能分享整个堆栈跟踪吗?看起来像
数据。key
不是证书。根据名称,它可能是公钥,而不是证书。你完全正确,我已经更新了问题,以更清楚地说明我要做什么。这是SPKI或X509格式的公钥,PEM编码。在.NETCore3.1下,有用于导入这样一个密钥的,但DER编码的。要将PEM转换为DER,请删除页眉和页脚,并对正文进行Base64解码。
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1iyta8F+SLHhbfy+f7fL
8LrsS1LKs05UaHm6muOTlzIdSDwo4dNiWg6rbiL2v4IwpglgL8kvbXLZ8Z3/E6Uu
uUi/IW1Hakgx65Qy4LkGxsnZ/jnLu3DxfY9xycMYq9TfNxIIvFPkbEJY/pwGjZ+q
13WegTJG7m+tqf5GbA3xTLz2DSHXPc7y77OnsDawHsOEou9IZZQCdxCg3L186gU4
yj6mC07Eop3lKMjsqNAXdVmnzcUc+PixQFCSjOcL9Fpbq+aHyYW+Pk9h5dWCGGNQ
wixTIJKTeDxAEkbZ2eLuqQZOCNbkHBn9x+IBxeKMmsmRg/J4/QqwCm+t+wd4VNAJ
ewIDAQAB
-----END PUBLIC KEY-----