簡體   English   中英

CCHmac上的EXC_BAD_ACCESS

[英]EXC_BAD_ACCESS on CCHmac

我在做HMAC-SHA256編碼。 試過但沒有找到任何解決方案。

#include <CommonCrypto/CommonHMAC.h>

- (NSString *)hmacWithKey:(NSString *)key andData:(NSString *)data
{
const char *cKey  = [key cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];

///////////////////////////////////////////////////////////////
////but on below line of code i am getting EXC_BAD_ACCESS//////
///////////////////////////////////////////////////////////////

CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);

//////////////////////////////////////////////

NSData *out = [NSData dataWithBytes:cHMAC length:CC_SHA256_DIGEST_LENGTH];

// description converts to hex but puts <> around it and spaces every 4 bytes
NSString *hash = [out description];
hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];
// hash is now a string with just the 40char hash value in it
NSLog(@"%@",hash);
return hash;
}

請告訴我,我在這里做錯了什么。 謝謝

cStringUsingEncoding:NSASCIIStringEncoding如果字符串包含非ASCII字符, cStringUsingEncoding:NSASCIIStringEncoding可以返回NULL 因此,您應該檢查cKey == NULLcData == NULL

或者更好的是,轉換為UTF-8字符串:

const char *cKey  = [key UTF8String];
const char *cData = [data UTF8String];

我使用示例字符串運行OP代碼沒有錯誤,因此錯誤必須在輸入中。 輸入中的一個或多個是nil或non-ascii。

請提供失敗的示例輸入。

順便說一句,沒有必要使用char字符串,這是一個使用NSData的例子:

NSData *cKey  = [key  dataUsingEncoding:NSUTF8StringEncoding];
NSData *cData = [data dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *out = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH];

CCHmac(kCCHmacAlgSHA256, cKey.bytes, cKey.length, cData.bytes, cData.length, out.mutableBytes);
NSLog(@"out: %@", out);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM