PHP ile yazılmış bir yazılım için bir OS X istemcisi yazıyorum. Bu yazılım komutları almak ve çalıştırmak için basit bir RPC arayüzü kullanır. RPC istemci o hiçbir MITM bunlardan herhangi birini değiştirebilirsiniz emin gönderdiği komutları imzalamak zorundadır.
Sunucu benim OS X istemcisi gönderilen imzaları kabul değildi Ancak, ben soruşturma başladı ve PHP'nin openssl_sign işlevi Objective-C {[(0) daha belirli bir özel anahtar / veri kombinasyonu için farklı bir imza oluşturur öğrendim }] çerçevesi (openssl lib için sadece bir sarıcı olan):
SSCrypto *crypto = [[SSCrypto alloc] initWithPrivateKey:self.localPrivKey];
NSData *shaed = [self sha1:@"hello"];
[crypto setClearTextWithData:shaed];
NSData *data = [crypto sign];
CtbkSxvqNZ+mAN
gibi bir imza üretir ...
PHP kodu
openssl_sign("hello", $signature, $privateKey);
generates a signature like 6u0d2qjFiMbZ+
...
(For my certain key, of course. base64 encoded)
Bu neden oluyor oldukça shure değilim ve ben başarısız farklı hash algoritmaları ile denedi. PHP belgelerine belirttiği gibi SHA1 varsayılan olarak kullanılır.
Peki neden bu iki işlevi farklı imzalar oluşturmak ve nasıl benim Objective-C kısmı openssl_verify kabul edecek Phps bir imza oluşturmak için alabilirim?
Not: Ben tuşları ve verilerin doğru olduğunu kontrol çift!