Отправка открытого ключа на Android из Ruby

1

На сервере

OpenSSL::PKey::RSA.generate(1024).public_key.to_s

возвращается

"-----BEGIN RSA PUBLIC KEY-----\nMIGJAoGBAPHpKZe0jKkyyslkhnoQzRovzQB+6OLtACNkILk+6UKgYJ1UM7Qkpxab\noEHnpR/XHrIfFUB8dfhaIeqHGC3IASZh6vveH6ypwZTqDHrejqYcfOuKOJcCRDJf\n/qxeVy1jwt7oMbrDhCeVNd3eIYdq0joEnZ6k4KwqvG1ZIOKkE8adAgMBAAE=\n-----END RSA PUBLIC KEY-----\n"

который работает, когда я копирую и вставляю эту строку в виде строки java. Однако мне нужно получить этот открытый ключ через httpResponse. Когда вызывается HttpRequest, он возвращает:

-----BEGIN RSA PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCySmMxjxX1Xw80yRB35BQHP27V
EhIUG9/bxsyJMs4rhmvnpP7saeBznyDMQ3I5wt7cJEPABy+QuuAGjphj6/FsfsXP
9zLRroX02f48fQXNM7j8RtQ5y8bhcZrnb8/MNoAKnbAqkKlkuW/gRxSB0qeG5Q17
vvSJ6KHb5heAFwaGtwIDAQAB
-----END RSA PUBLIC KEY-----

Но это неверно. Что дает?

  • 0
    Это выглядит актуально для меня. \ N расширяются до новых строк
Теги:
public-key-encryption
openssl

1 ответ

0

Это действительно хороший :) Хорошо, пусть начнется с самого начала.

  • Я проверил, могу ли я Base64-декодировать содержимое строки с проблемами → да
  • Я проверил, является ли декодированный байтовый массив действительной кодировкой DER → да
  • Я проверил, является ли DER-кодировка открытым ключом RSA → да
  • Я проверил, могу ли я разобрать исходную строку как открытый ключ RSA напрямую → no

WTF?! Затем я перекодировал открытый ключ RSA, я смог декодировать PEM - и это дало мне:

-----BEGIN PUBLIC KEY-----
... same Base64 as in your string ...
-----END PUBLIC KEY-----

Посмотрите разницу - это заголовки PEM. Структура, которая кодируется Base64, представляет собой общее представление открытого ключа X.509 (а следовательно, и разницу в заголовках), а не специфическое для RSA представление, описанное в PKCS # 1, которое будут подразумевать ваши заголовки! Если вы измените заголовки PEM, тогда это сработает!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню