Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BouncyCastle编码差异_Java_C#_Encoding_X509certificate_Bouncycastle - Fatal编程技术网

Java BouncyCastle编码差异

Java BouncyCastle编码差异,java,c#,encoding,x509certificate,bouncycastle,Java,C#,Encoding,X509certificate,Bouncycastle,我正在尝试计算公钥的哈希值,以匹配ApplePay给我的值。我无法让C语言中的BouncyCastle以正确的格式给我公钥,这样我就可以散列它。然而,我移植的Java版本工作得很好。OpenSSL也给出了正确的响应,但我不希望为了做到这一点而必须处理OpenSSL和BC 爪哇:(作品) OpenSSL:(工作) 移植GetEncoding的正确方法是什么 我知道关键数据是错误的,因为当我从openssl手动强制输入数据时,我得到了正确的哈希值 编辑:添加输出。我想它只是: byte[] keyB

我正在尝试计算公钥的哈希值,以匹配ApplePay给我的值。我无法让C语言中的BouncyCastle以正确的格式给我公钥,这样我就可以散列它。然而,我移植的Java版本工作得很好。OpenSSL也给出了正确的响应,但我不希望为了做到这一点而必须处理OpenSSL和BC

爪哇:(作品)

OpenSSL:(工作)

移植GetEncoding的正确方法是什么

我知道关键数据是错误的,因为当我从openssl手动强制输入数据时,我得到了正确的哈希值


编辑:添加输出。

我想它只是:

byte[] keyBytes = certificate.CertificateStructure.SubjectPublicKeyInfo.GetDerEncoded()

您是否也可以显示对Java和C#
GetEncoded
(以64进制或十六进制为单位)的调用的输出?添加了相应的输出。我必须对这一个调用犯规。Java的MessageDigest.digest()方法的base64编码输出不可能像您所描述的那样。请发布正确的代码/输出,这很可能只是
getEncoded()
输出的base64编码,而这些根本不是散列。我发布的数据对散列的输入进行了编码,而不是散列本身。正如我在问题中所说,哈希可以正常工作,问题是getEncoded()在c#中的行为与在Java中的行为不同。getEncoded产生的数据在功能上是相同的,据我所知,我可以从字节[]重建密钥对象,但是因为它不是相同的字节数组,所以散列结果是错误的。哇,谢谢!!我正准备下载java源代码,看看它与C有什么不同。
openssl x509 -noout -pubkey -in <file> -inform der 
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+4wQWWRnPqGlsncZX17t0CfLOl6u
68aXUsqnzlIcpCdDukHhxibd2MjHPFGpnK3ZKdHxIFh+NBQvGssM5ncm1g==
-----END PUBLIC KEY-----
SubjectPublicKeyInfo pubinfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(certificate.GetPublicKey());
byte[] keyBytes = pubinfo.GetEncoded();

byte[] keyHash = DigestUtilities.CalculateDigest("SHA_256", keyBytes);

string keyBytesEncoded = Convert.ToBase64String(keyBytes);
/*keyBytesEncoded == MIIBKjCB4wYHKoZIzj0CATCB1wIBATAsBgcqhkjOPQEBAiEA/////wAAAAEAAA
AAAAAAAAAAAAD///////////////8wWwQg/////wAAAAEAAAAAAAAAAAAAAAD/
//////////////wEIFrGNdiqOpPns+u9VXaYhrxlHQawzFOw9jvOPD4n0mBLAx
UAxJ02CIbnBJNqZnjhE50mt4GffpAEIQNrF9Hy4SxCR/i85uVjpEDydwN9gS3r
M6D0oTlF2JjClgIhAP////8AAAAA//////////+85vqtpxeehPO5ysL8YyVRAg
EBA0IABPuMEFlkZz6hpbJ3GV9e7dAnyzperuvGl1LKp85SHKQnQ7pB4cYm3djI
xzxRqZyt2SnR8SBYfjQULxrLDOZ3JtY=
line break added for readability */
byte[] keyBytes = certificate.CertificateStructure.SubjectPublicKeyInfo.GetDerEncoded()