【问题标题】:What is Objective C equivalent of openssl_sign from PHP?什么是 PHP 中 openssl_sign 的 Objective C 等价物?
【发布时间】:2015-07-30 04:00:33
【问题描述】:

我需要创建一个字符串的符号。我在 PHP 中有一个工作代码:

function buildSign($toSign, $key) {
    $signature = null;

    $pkeyid = openssl_get_privatekey($key);
    openssl_sign($toSign, $signature, $pkeyid);
    openssl_free_key($pkeyid);

    return base64_encode($signature);
}

如何在目标 c 中创建与此功能等效的函数?

我试过这段代码

- (NSString*) signString:(NSString*)string key:(NSString *)key {
    const char *cKey  = [key cStringUsingEncoding:NSUTF8StringEncoding];
    const char *cData = [string cStringUsingEncoding:NSUTF8StringEncoding];
    unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];
    CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
    NSData *hmac = [[NSData alloc] initWithBytes:cHMAC
                                          length:sizeof(cHMAC)];
    return [hmac base64EncodedString];
}

但它会返回一个非常短的字符串,如下所示:zM5GPdSiDooWSm78fLCdTnw1LHQ=

我需要这样的长标志:

ECkpqi5euq0lL66biLA3A92eeKaQhEuwg4IJ7IC4fmJjF5LwV9VNuxaJNpI4z7xqxlUg+kMi+u0pgMP7b5cH141EWdFGHa3SSR9PvyMTszRRLJq3ykaJIX/yKvW7wEfFxVCosiX8ufSiR1o3mAnm8jArDhJoQTjproMS3pmeSsF5anhh5TUn+5wgYgrgjS+3WEnN6X95GTRcpnDE/F/W2ON7ydhd1iGtNoT/1MPn9nbCI3CMubI7RjnompVXB3eVcv7ZQII3jLfMEdSQ93IDCS6bFGUVNF37or/Bhr4B4DARO5u4TvPtq0vZQNmUSLdkaLl593FgA8Det/NevYprmodL6hzgTlws8OIYVoeyxBpoHquuoqPMvkkFzFUlKRAUeGwBMhW83EmKU4DU5+n7aRrdxotBt+RxAfcqoJJNpSmzeeeWcLu5XAizvVmm59EB0Qeuuy8EdqMoCVTee4dHJf63alrvV8NYu+PoMuF3GohVldYoYYuqdGfhI4tH0dqv83F8OXpFADQU+CPgIm4bRoS5P8jR6X94SmSVCHWgjuXGDVt//tUCzAG8xsmEBuy8i75MlFmYZ8SFzyXzBtRJ0xUVhc8WToQYcjB8SmwAIyUICwyyuSt5flUF30x2b6GxBt8yCmgrzXlIRIzA1TfFGada1dJKTiikOlZb02eA+xs=

【问题讨论】:

    标签: php objective-c encryption


    【解决方案1】:

    SHA-1 创建一个 20 字节的输入哈希。 HMAC-SHA1 返回 SHA-1 输出,在本例中为 BASE64 编码字符串表示。但不应再使用 HSA-1,而是使用 SHA-256 或 SHA-512,它们返回 32 或 64 个字节。

    但这不是您匹配使用私钥或密钥对使用 OPENSSL_ALGO_SHA1 算法签名的 PHP 代码所需要的。

    虽然 Apple 不提供 OpenSSL 的预编译版本,但您可以获取源代码并自行编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-28
      • 2013-12-01
      • 2011-07-21
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 2010-10-24
      相关资源
      最近更新 更多