ios - 使用 key 和消息快速创建哈希

标签 ios objective-c swift

我想在 swift 中使用 key 创建字符串的 SHA1 hmac 哈希。在 obj-c 中我使用了这个并且效果很好:

+(NSString *)sha1FromMessage:(NSString *)message{

    const char *cKey  = [API_KEY cStringUsingEncoding:NSASCIIStringEncoding];
    const char *cData = [message cStringUsingEncoding:NSUTF8StringEncoding];

    NSLog(@"%s", cData);

    unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];

    CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
    NSData *HMACData = [NSData dataWithBytes:cHMAC length:sizeof(cHMAC)];

    const unsigned char *buffer = (const unsigned char *)[HMACData bytes];
    NSMutableString *HMAC = [NSMutableString stringWithCapacity:HMACData.length * 2];

    for (int i = 0; i < HMACData.length; ++i){
        [HMAC appendFormat:@"%02hhx", buffer[i]];
    }
    return HMAC;
}

但是现在我很难将其转化为 swift。这是我到目前为止所拥有的:

static func sha1FromMessage(message: String){

        let cKey = RestUtils.apiKey.cStringUsingEncoding(NSASCIIStringEncoding)!
        let cData = message.cStringUsingEncoding(NSUTF8StringEncoding)!
        let cHMAC = [CUnsignedChar](count: Int(CC_SHA1_DIGEST_LENGTH), repeatedValue: 0)

        CCHmac(kCCHmacAlgSHA1, cKey, cKey.count, cData, cData.count, cHMAC)
        ...
}

还有这一行

CCHmac(kCCHmacAlgSHA1, cKey, cKey.count, cData, cData.count, cHMAC)

已经给我一个错误Int is not conversionble to CCHmacAlgorithm。关于如何将 obj-c 代码转换为 swift 的任何想法?

最佳答案

CCHmac()的最后一个参数函数的类型为 UnsafeMutablePointer<Void>因为 这就是结果写入的地方。你必须申报 cHMAC作为变量 并将其作为 in-out 表达式 传递给 & 。此外,一些类型转换 是必要的:

var cHMAC = [CUnsignedChar](count: Int(CC_SHA1_DIGEST_LENGTH), repeatedValue: 0)
CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA1), cKey, UInt(cKey.count), cData, UInt(cData.count), &cHMAC)

关于ios - 使用 key 和消息快速创建哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26655999/

相关文章:

ios - iOS SDK Skype + 中的延迟问题连接完成时默认音频源静音

ios - ionic 电容器型号

ios - 如何在我的 iOS Native SDK 中添加 React Native 支持层

swift - 在 segue 之后处理任何可选的

ios - Swift 从 CKRecord 返回添加整数

ios - 如何在PDF上下文中绘制文本

ios - 如何检测来自 iOS native 应用程序中推文的链接

objective-c - 在图像查看器中缩放

ios - UIImagePickerControllerDelegate 到 Swift?

ios - Swift 中的 ImageView 到 Firebase 存储