Отправка открытого ключа на Android из Ruby - PullRequest
1 голос
/ 23 августа 2011

на сервере

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-----

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

1 Ответ

0 голосов
/ 25 августа 2011

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

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

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

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

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

...