RSA_sign или DSA_sign в PHP! - PullRequest
1 голос
/ 12 июля 2009

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

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

Заранее спасибо за все ответы !!!

Ответы [ 2 ]

0 голосов
/ 12 июля 2009

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

Я нашел проблему в хеш-строке, которую я использую с openssl_sign! У меня есть этот код в target-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

Выход второго кода:

a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

Как видите, пропущен '0'! Что я не прав?

0 голосов
/ 12 июля 2009

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

EDIT:

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