RSA между php-сервером и java (Android) клиентом.

#java #php #android #security #rsa

#java #php #Android #Безопасность #rsa

Вопрос:

Я разрабатываю решение из двух частей: первая часть — шифрование SMS, которое будет основано на Android. в то время как вторая часть должна касаться выдачи и обмена открытыми / закрытыми ключами.

Все было в порядке, пока я не столкнулся с этой проблемой: если вы используете классы криптографии java, которые предоставляют mod и exp ключа для генерации ключевого объекта. Хотя все, что я получаю от сервера, который генерирует ключи, является предварительно вычисленным открытым ключом. итак, не удается получить mod или exp с сервера, где я использую phpseclib.

после некоторых исследований: я пришел с тремя вариантами, которые мне нужны, чтобы решить, какой из них лучший.

1) если есть способ получить доступ к mod amp; exp из phpseclib, проблема будет решена за меньшее время, верно?

2) замена собственного класса криптографии в Java сторонним, таким как bouncy castle, который будет принимать открытый ключ, является одним из параметров.

3) изменение языка на стороне сервера на JSP. тогда я мог бы использовать одни и те же классы с двух сторон.

Какое из этих решений будет проще всего принять .. ?

Большое вам спасибо.

Комментарии:

1. Какой формат «ключа» отправляет сервер? — Необходимые криптографические параметры будут закодированы в нем и должны быть извлечены.

2. я думаю, что по умолчанию это CRYPT_RSA_PUBLIC_FORMAT_PKCS1, указанный в документации phpseclib. вывод из разорвать, как : -----BEGIN PUBLIC KEY----- MIGfAoGXCsLnyw64KfYTd4hjhq6sS 4AhnwgnAm/N/jMEaXtFCMVDfkY48dg5nMcOxjRmuJSK4Qr xDIjCtRyNkBj6nVDjwDGVe4vF5 s7dkI1lwlfOM2kl/zuuUveeYaT1pSehh2gs2j32deIR8o1zhI 0 bCebB yC mGND5Ro0dgc6z8AFevSEO12Ww9GP1ZFlTuwRAIt0/e3ZrIQIDAQAB -----END PUBLIC KEY-----

Ответ №1:

я ответил на свой собственный вопрос для дальнейшего использования всеми.

1) связавшись с автором phpseclib, он сказал мне

В последней версии SVN добавлена поддержка следующего: CRYPT_RSA_PRIVATE_FORMAT_XML CRYPT_RSA_PUBLIC_FORMAT_XML CRYPT_RSA_PRIVATE_FORMAT_PUTTY»

что должно решить любую проблему, подобную моей.

2) Что касается меня, я преодолел ситуацию (которая произошла до приведенного выше ответа), сгенерировав открытый и закрытый ключи из собственной библиотеки Java RSA, а затем сохранив их на сервере веб-базы данных, запущенном с помощью codeigniter. вы можете создать простой API для себя.Создайте URL-соединение android (java) и передайте URL-адрес со значениями, которые вы хотите сохранить, а затем проанализируйте его на другой стороне.

это может выглядеть так: http://localhost/myApp/index.php/AndroidisTalking/registerKeys/VAR1/VAR2 обратите внимание, что VAR1, VAR2 являются сгенерированными ключами.

Надеюсь, это поможет. и спасибо Ханно Бендеру за большую помощь.

Ответ №2:

Хорошо, просто взглянул на http://phpseclib.sourceforge.net/documentation/misc_crypt.html#misc_crypt_rsa_format .

Простым подходом было бы использовать CRYPT_RSA_PRIVATE_FORMAT_XML синтаксический анализ XML на Android.

Редактировать: забудьте об этом 🙂

Другой формат — CRYPT_RSA_PUBLIC_FORMAT_RAW — хранится в виде массива с двумя индексами — один для модуля и один для экспоненты.

и

getPublicKey() имеет необязательный параметр — $type — который задает формат.

При этом вы должны получить массив из двух элементов, модуля и экспоненты, которые затем вы можете передать любым удобным вам способом с сервера вашему клиенту.

Комментарии:

1. Спасибо, я знаю, что я должен передать тип, поскольку $rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_XML); мой код выглядит так $rsa = new Crypt_RSA(); $array = $rsa->createKey(1204, 60); $rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_XML); extract($array); echo $publickey; , и просто не все правильно, я получаю старый формат.

2. теперь ясно, только что заработал необработанный формат, вы должны поставить setPublicKeyFomat(CRYPT_RSA_PUBLIC_FORMAT_RAW) перед createKey() Спасибо Ханно 🙂

3. если можно, как я могу сгенерировать открытый ключ в виде XML-листа?

4. Я не знаю, но вы пробовали необязательный параметр $type с помощью getPublicKey() ?

5. да, я пытался, но не сработало. кроме того, в документации говорится, что вы не должны использовать этот метод. Другая проблема : нет способа установить закрытый ключ в формате RAW. 🙁 какая мелочь.