Однако, поскольку сервер не принимал подписи, которые я отправлял от моего клиента OS X, я начал расследование и обнаружил, что функция PHP openssl_sign генерирует другую подпись для данной комбинации закрытого ключа/данных, чем платформа Objective-C SSCrypto (которая является всего лишь оболочкой для библиотеки openssl):
Код: Выделить всё
SSCrypto *crypto = [[SSCrypto alloc] initWithPrivateKey:self.localPrivKey];
NSData *shaed = [self sha1:@"hello"];
[crypto setClearTextWithData:shaed];
NSData *data = [crypto sign];
Код PHP
Код: Выделить всё
openssl_sign("hello", $signature, $privateKey);
(Конечно, для моего определенного ключа. В кодировке base64)
Я не совсем уверен, почему это происходит, и я безуспешно экспериментировал с разными хэш-алгоритмами. В документации PHP указано, что по умолчанию используется SHA1.
Так почему же эти две функции генерируют разные подписи и как я могу заставить мою часть Objective-C генерировать подпись, которую PHP будет принимать openssl_verify?
Примечание: я дважды проверил правильность ключей и данных!
Подробнее здесь: https://stackoverflow.com/questions/269 ... yptos-sign
Мобильная версия