2017-09-08 95 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格式。