C# RSA签名。如何从字节[]符号中提取字符串?

C# RSA签名。如何从字节[]符号中提取字符串?,c#,algorithm,cryptography,base64,sha256,C#,Algorithm,Cryptography,Base64,Sha256,我必须使用一些API,哪个服务拥有我的证书。他们可能希望我的签名验证它是否与他们服务器上的证书相同。我不确定,但是。在文件中,说明如下: sign_base = <?xml version="1.0" encoding="UTF-8"?> <ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> //big XML, but i can't paste it here, because of NDA

我必须使用一些API,哪个服务拥有我的证书。他们可能希望我的签名验证它是否与他们服务器上的证书相同。我不确定,但是。在文件中,说明如下:

sign_base = 
<?xml version="1.0" encoding="UTF-8"?> <ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">  

//big XML, but i can't paste it here, because of NDA i signed (with pen ;-)) 

</ds:Reference> </ds:SignedInfo> 

rsa_sha256(sign_base) = 
113c7ed1e66e1ef77c0857d418928bdf1d3bdf27b8d06c7...40d1c0a259733ad0b1b2
// its long hash so i made "..." it is 516 characters there. 

base64(rsa_sha256) =  ETx+0eZuHvd8CFfUGJKL3x073ye40Gx7mB0.... tCxsg==
//it is a base64 of rsa_256 hash above.

受软件问题的启发,我尝试使用rsacryptserviceprovider=newrsacryptserviceprovider;然后var signed=provider.SignDatasign_base,CryptoConfig.CreateFromNameSHA256;但结果只给出字节[]。当我将字节[]解码为UTF-8时,字符串结果不可读?????????。。???我可以将其与其他标志进行比较,并完成RSACryptoServiceProvider允许的所有工作,但我的问题是:

他们希望在请求中以参数形式发送此哈希,因此将其声明为base64字符串。我必须只发送base64格式的消息,但我必须首先计算它


如何得到这个符号的字符串?也许我的选择有错,而我做错了?如果你给我不同于C语言的帮助,它也会很有帮助

如果我理解得很好,并且假设您的签名是正确的,那么一旦您将其作为byte[],您就应该能够使用Convert.ToBase64Stringbyte[]数据。
与您所做的不同,您应该能够看到类似于示例的字符串。

加密函数几乎完全作用于字节。编码/解码通常留给用户。只有当您需要将结果作为文本而不是二进制处理时,才需要Base 64,就像您希望将其放入XML结构中一样。。。因此,您必须使用编码,或者使用提供XML DigSig(这是一种加密标准)的更高级别API。