2017-09-08 3 views
-5

私はJavaとDelphiの間でデジタル署名を実装する必要があるプロジェクトに取り組んでいます。私はJavaの部分とDelphiの別の開発者を開発しています。JavaとDelphi間のデジタル署名

私たちはSHA256WithRSA(符号付きバイトの基数64は同じです)を使用して私有鍵で署名を相互運用することができました。

私はOpenJDK実装を使用していますが、Delphi開発者はChilkatライブラリを使用しています。

問題は署名検証にあります。我々は2つの言語の公開鍵の同じバイト表現を得ることができませんでした。公開鍵

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

の公開鍵

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

デルファイベース64の表現の

のJavaベース64の表現の違いは小さいが、キーは他では動作しないように十分です言語。

ideias?

おかげ

+1

コードなしではありません。 – RealSkeptic

+1

あなたのコードに答えがあります。がんばろう。 [mcve]。 –

+0

符号化される入力データが異なるため、base64出力が異なります。 2つのbase64文字列を生のバイトにデコードすると、2つのバイトセットに違いがあることがわかります。あなたの2つのコードは、base64エンコーディングの前に同じバイトを生成していません。 –

答えて

0

java.security.PublicKey.getEnconded()チルカットライブラリ上から同じ値を取得するには、ブールパラメータにCkPublicKey.GetDer()と合格を使用する必要がありますPKCS8形式を使用するようにします。