【发布时间】:2010-04-23 14:29:11
【问题描述】:
我正在为一个用 PHP 编写的软件编写一个 OS X 客户端。该软件使用简单的 RPC 接口来接收和执行命令。 RPC 客户端必须对他发送的命令进行签名,以确保任何 MITM 都无法修改它们。
但是,由于服务器不接受我从 OS X 客户端发送的签名,我开始调查并发现 PHP 的 openssl_sign 函数为给定的私钥/数据组合生成的签名与 Objective-C @987654321 不同@ 框架(它只是 openssl 库的包装器):
SSCrypto *crypto = [[SSCrypto alloc] initWithPrivateKey:self.localPrivKey];
NSData *shaed = [self sha1:@"hello"];
[crypto setClearTextWithData:shaed];
NSData *data = [crypto sign];
生成一个签名,如CtbkSxvqNZ+mAN...
PHP 代码
openssl_sign("hello", $signature, $privateKey);
生成像6u0d2qjFiMbZ+这样的签名...
(当然是我的某个key。base64编码)
我不太清楚为什么会发生这种情况,并且我尝试了不同的哈希算法但没有成功。正如 PHP 文档所述,默认使用 SHA1。
那么为什么这两个函数会生成不同的签名,我如何让我的 Objective-C 部分生成 PHP 的 openssl_verify 将接受的签名?
注意:我仔细检查了密钥和数据是否正确!
【问题讨论】:
标签: php objective-c security openssl rsa