2009-07-12 3 views
1

Я собираюсь реализовать генератор ключей ключей на своем веб-сайте, но у меня очень мало знаний о php! В моем приложении (Cocoa) я интегрировал проверку системы, использующую функцию RSA_sign (в C#) ... Я бы хотел использовать систему уведомлений IPN PayPal для автоматического создания и отправки моим пользователям своих лицензионных ключей ... но я действительно не знаю, как подписать строку в php, используя ключ RSA !!! В php я знаю только функцию openss_sign, но это не одно и то же! Или лучше и проще использовать метод подписи DSA ???RSA_sign или DSA_sign в PHP!

Пожалуйста, помогите!

Заранее благодарим за ответы на все вопросы !!!

ответ

0

Вы хотите openssl_sign().

EDIT:

  • Убедитесь, что сообщение дайджеста является тот, который вы хотите использовать для проверки.
  • Не тестируйте его, сравнивая вывод base64 с другой подписью, проверяя его, проверяя подпись в коде C#. Я считаю, что две действующие подписи с одним и тем же ключом из одних и тех же данных имеют разные двоичные представления.
+0

, но я попытался подписать ту же строку перед RSA_sign в C#, а затем с openss_sign в PHP. ... и представление base64 отличается! Если вы хотите, чтобы я опубликовал свой код !!! – 2009-07-12 09:11:42

+0

Я разместил шестнадцатеричный вывод SHA1, чтобы быть более объективным! Есть некоторая ошибка? – 2009-07-12 10:19:51

0

Спасибо! Ты прав!

Я нашел проблему, находится в хэш-строке, которую я использую с openssl_sign! Я этот код в Objective-C:

NSString *stringToEncript = @"test"; 

const char *clearText = [stringToEncript UTF8String]; 

unsigned char md[SHA_DIGEST_LENGTH]; 
SHA1((unsigned char *)clearText, strlen(clearText), md); 

for(int i=0; i<SHA_DIGEST_LENGTH; i++) 
    printf("%x", md[i]); 

и в PHP Я написал:

$stringToEncrypt = "test"; 

$hash = sha1(utf8_encode($stringToEncrypt)); 
echo $hash; 

Выход первого кода:

a94a8fe5ccb19ba61c4c873d391e987982fbbd3

Выходной сигнал второго кода:

a94a8fe5 ccb19ba61c4c0873d391e987982fbbd3

Как вы видите, отсутствует «0»! Что я не так?

+0

Если вы используете «% 02x» в качестве строки printf, вы получите то, что ожидаете от вас. Я думаю, что вижу проблему. openssl_sign() делает хэш SHA1 для вас - вы просто передаете ему $ stringToEncrypt. Если вы сами сделаете хеш, это приведет к подписанию хеш-хэша. – caf

+0

Хорошо! Так что я сделал не так, как результат! Но когда я генерирую подписанную строку в двоичном кодировании, есть способ, в php, создать файл .plist в whitch, подписанная строка - это объект NSData? Или я должен сделать base64 кодировку подписанной строки, а затем сохранить ее как объект NSString в файле plist? – 2009-07-12 12:59:18

+0

PHP может выводить двоичный код, конечно. Но вывод версии base64, вероятно, будет проще анализировать и легче отлаживать. – caf

 Смежные вопросы

  • Нет связанных вопросов^_^