C# SHA256 RSA 签名。如何从 byte[] 符号中取出一个字符串?

标签 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 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.

受 SoF 问题的启发,我尝试使用 RSACryptoServiceProvider provider = new RSACryptoServiceProvider(); 然后 var signed = provider.SignData(sign_base, CryptoConfig.CreateFromName("SHA256")); 但结果只给我 bytes[]。当我将 bytes[] 解码为 UTF-8 string 结果是不可读的“??????????..???”我可以将其与其他标志进行比较,并执行 RSACryptoServiceProvider() 允许的所有操作,但我的问题是:

他们想在请求中将这个散列作为参数发送,所以它被声明为 base64 字符串。我必须只发送 base64 格式的消息,但我必须先计算它。

如何获取这个标志的字符串?也许我的选择有误,我做错了?如果你用不同于 C# 的语言给我帮助,那也会很有帮助。

最佳答案

如果我理解得很好并且假设你的签名是正确的,一旦你将它作为 byte[],你应该能够使用 Convert.ToBase64String(byte[] data) 使用 System.Convert.ToBase64String . 与您所做的不同,您应该能够看到一个类似于示例的字符串。

关于C# SHA256 RSA 签名。如何从 byte[] 符号中取出一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57689278/

相关文章:

c# - 当我返回某些内容时,并非所有代码路径都返回一个值

algorithm - 开放空间坐姿优化算法

string - 尝试与三元搜索树进行自动完成?

python - 我可以在Python中生成16个值的固定加密消息吗

Java 和 python 没有获得相同的 sha-1 值

c# - 异步ping

c# - 使用 mysql 数据库制作项目列表

c# - 如何从 ASP .NET MVC razor View 仅发布完整模型的一部分

algorithm - 乘法算法的循环不变性证明

java - AES 随 secret 钥生成