#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. 🙁 какая мелочь.