我想在 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/