2017-09-08 34 views
-5

我正在开发一个项目,我需要在Java和Delphi之间实现数字签名。我正在开发Java部分,另一个开发人员是Delphi部分。Java和Delphi之间的数字签名

我们能够使用SHA256WithRSA与私钥进行交互签名(从签名字节开始的64位是相同的)。

我正在使用OpenJDK实现,Delphi开发人员正在使用Chilkat库。

问题在于签名验证。我们无法获得两种语言的公钥相同的字节表示。

的Java基地64公钥

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2L6O8YUP5vNJAjqIZAh8yMaPdL+Xcs2lwI9+bvstQT+3sy8S/EC15BoL7vIbp7I2SarPp9ASvxTRvU6sNyD5cVPUW05NkBOM24uhdLs8TNXibbnQAVAMpjkMGkmqZTTeWfYjeHImwjX/K32mNSC+F3i2rQHLtnyPO2ktmAW9lJbGvdwAX0HT0CBT9Z4tZKVn3cRlJva2bqK5z/0xx8Po+Yzh2eK1WZC3coKQQggiPVzFcJJFHtICuklrFZ+vTkpx3apFov27XgkWhCjh6ZZ7UPIVHEZhTlixKBxM36agRZTqZROwFc01nau9f4HWCpsnbm2RBoT3IkNxEq8IRgcFaQIDAQAB 

德尔福基地64公钥

MD8BIjANBgkqP0g/9w0BAQEFAAM/AQ8AMD8BCgI/AQEA2L4/8T8P5vNJAjo/ZAh8yMaPdL8/cs2lwI9+bvstQT+3sy8S/EC15BoL7vIbp7I2SarPp9ASvxTRvU6sNyD5cVPUW05NkBM/2z+hdLs8TNXibbnQAVAMpjkMGkmqZTTeWfYjeHImwjX/K32mNSC+F3i2rQHLtnyPO2ktPwW9Pz/GvdwAX0HT0CBT9T8tZKVn3cRlJva2bqK5z/0xx8Po+T/h2eK1WZC3cj+QQggiPVzFcD9FHtICuklrFT+vTkpx3apFov27XgkWPyjh6T97UPIVHEZhTlixKBxM36agRT/qZROwFc01nau9f4HWCj8nbm0/Bj/3IkNxEq8IRgcFaQIDAQAB 

的差别很小,但足以让关键的其他不工作的代表表示语言。

任何意识?

感谢

+1

不是没有代码,没有。 – RealSkeptic

+1

可以在您的代码中找到答案。祝你好运。 [MCVE]。 –

+0

base64输出不同,因为正在编码的输入数据不同。如果您将两个base64字符串解码为原始字节,您将看到两组字节之间存在差异。在base64编码之前,您的两个代码不会生成相同的字节。 –

回答

0

java.security.PublicKey.getEnconded()上奇尔卡特库得到相同的值,你必须使用CkPublicKey.GetDer()并通过布尔参数使其使用PKCS8格式。