2015-05-18 51 views
0

我需要創建一個字符串的標誌。我在PHP中有一個工作代碼:什麼是來自PHP的openssl_sign的Objective C等價物?

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= 

回答

0

SHA-1產生輸入一個20字節的哈希值。 HMAC-SHA1返回SHA-1輸出,在這種情況下是BASE64編碼的字符串表示。但不應再使用HSA-1,而應使用SHA-256或SHA-512,這些返回32或64字節。

但這並不是您需要的,以便匹配使用私鑰或密鑰對使用OPENSSL_ALGO_SHA1算法進行簽名的PHP代碼。

儘管Apple不提供OpenSSL的預編譯版本,但您可以自己獲取源代碼並進行編譯。

相關問題