2017-05-13 8 views
-1

作成したこのメソッドを変換したいSwift3Objective CiOSの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.Sです。 –

+1

あなたはより正確に何が*間違っているかを特定する必要があります。 –

答えて

1

のObjective-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]; 
} 

トリッキーな部分は最後に右にあります。明らかにスウィフトコードにはhexEncodedStringNSDataというメソッドが追加された関数が(おそらく拡張機能内に)含まれています。

+0

ヘックス@ scott-thompson –

+0

このようにダイジェストを設定することができます:uint8_t digest [CC_SHA256_DIGEST_LENGTH] = {0}; @ scott-thompson –

+0

私が書いたこのコードの考え方は何ですか? https://paste.laravel.io/An94l#12 –

関連する問題