Цифровая подпись между Java и Delphi

Я работаю над проектом, где мне нужно реализовать цифровую подпись между Java и Delphi. Я занимаюсь разработкой части Java, а другой разработчик - частью Delphi.

Мы смогли взаимодействовать подписью с закрытым ключом, используя SHA256WithRSA (база 64 из подписанных байтов такая же).

Я использую реализацию OpenJDK, а разработчик Delphi использует библиотеку Chilkat.

Проблема с проверкой подписи. Мы не смогли получить одинаковое байтовое представление открытого ключа на двух языках.

Java base 64 представление открытого ключа

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

Delphi base 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 ответ

Решение

Чтобы получить то же значение из java.security.PublicKey.getEnconded() в библиотеке Chilkat, вы должны использовать CkPublicKey.GetDer() и передать false в логический параметр, чтобы он использовал формат PKCS8.

Другие вопросы по тегам