- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我必须使用一些 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/
我是一名优秀的程序员,十分优秀!