2017-05-13 1 views
-1

만든이 메서드를 변환하려는 Swift3 to Objective C.iOS에서 CCHmacContext()를 시뮬레이트하는 방법 Objective C?

func HMAC_CREATOR(MIX_STR mixStr:String,KEY_DATA_UINT8 keyDataUint8:Array<UInt8>) -> String { 
     let signatureData : Data = mixStr.data(using: .utf8)! 
     let digest = UnsafeMutablePointer<UInt8>.allocate(capacity:Int(CC_SHA256_DIGEST_LENGTH)) 
     var hmacContext = CCHmacContext() 
     CCHmacInit(&hmacContext, CCHmacAlgorithm(kCCHmacAlgSHA256), (keyDataUint8), (keyDataUint8.count)) 
     CCHmacUpdate(&hmacContext, [UInt8](signatureData), [UInt8](signatureData).count) 
     CCHmacFinal(&hmacContext, digest) 
     let macData = Data(bytes: digest, count: Int(CC_SHA256_DIGEST_LENGTH)) 
     return macData.hexEncodedString() 
    } 
+0

시도해 보셨습니까? http://stackoverflow.com/a/756538/5329717? –

+0

그것은 @ Kamil입니다. –

+1

당신은 * 정확하게 * 틀린 것을 좀 더 구체적으로 설명 할 필요가 있습니다. –

답변

1

오브젝티브 C로 코드의 비교적 직선 번역은 다음과 같습니다

#include <CommonCrypto/CommonCrypto.h> 

NSString *HMAC_CREATOR(NSString *mixStr, UInt8 *keyData, size_t keyDataLength) { 
    NSData *signatureData = [mixStr dataUsingEncoding: NSUTF8StringEncoding]; 

    CCHmacContext hmacContext; 
    CCHmacInit(&hmacContext, kCCHmacAlgSHA256, keyData, keyDataLength); 
    CCHmacUpdate(&hmacContext, signatureData.bytes, signatureData.length); 

    NSMutableData *digest = [[NSMutableData alloc] initWithCapacity: CC_SHA256_DIGEST_LENGTH]; 
    CCHmacFinal(&hmacContext, digest.mutableBytes); 

    // hexEncodedString is not a member of NSData so I'm not sure what this is supposed to be. 
    // Probably added in Swift by an extension 
    return [digest hexEncodedString]; 
} 

까다로운 부분은 마지막에 바로 거기에있다. 분명히 Swift 코드에는 hexEncodedString이라는 메서드를 NSData에 추가하는 함수 (확장 프로그램 포함)가 포함되어 있습니다.

+0

@ scott-thompson을 16 진수로 변환하는 방법 –

+0

다음과 같이 digest를 설정할 수 있습니까? uint8_t digest [CC_SHA256_DIGEST_LENGTH] = {0}; @ scott-thompson –

+0

내가 작성한이 코드에 대한 아이디어는 무엇입니까? https://paste.laravel.io/An94l#12 –

관련 문제