【问题标题】:How to simulate CCHmacContext() in iOS Objective C? [closed]如何在 iOS Objective C 中模拟 CCHmacContext()? [关闭]
【发布时间】:2017-10-12 11:03:20
【问题描述】:

我想将创建 Swift3 的这个方法转换为 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()
    }

【问题讨论】:

  • 你试过这个吗:stackoverflow.com/a/756538/5329717
  • 这是错误的@Kamil.S
  • 您需要更具体地说明究竟是什么出了问题。
  • 很清楚,因为这些方法中的结果字符串不同@Kamil.S
  • @zaph 你有什么想法吗?

标签: ios objective-c swift sha256 cchmac


【解决方案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];
}

棘手的部分就在最后。显然,您的 Swift 代码包含一个函数(可能在扩展中),该函数将一个名为 hexEncodedString 的方法添加到 NSData

【讨论】:

  • 如何使用十六进制 @scott-thompson
  • 我可以这样设置摘要:uint8_t digest[CC_SHA256_DIGEST_LENGTH]={0}; @斯科特汤普森
  • 我写的这段代码有什么想法? paste.laravel.io/An94l#12
猜你喜欢
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
相关资源
最近更新 更多