2011-01-29 55 views
2

我無法從字符串計算SHA1哈希值,然後將其放回到另一個字符串中。這是我做的:如何在NSString中用SHA1哈希捕獲NSData?

unsigned char hashedChars[20]; 
CC_SHA1([hashElements UTF8String], [hashElements lengthOfBytesUsingEncoding:NSUTF8StringEncoding], hashedChars); 
NSData *hashedData = [NSData dataWithBytes:hashedChars length:20]; 
NSString *hash = [[NSString alloc] initWithData:hashedData encoding:NSUTF8StringEncoding]; 
NSLog(@"%s", hash); 

日誌的結果是(null)。我基本上通過組合一些字符串來創建一個字符串,然後嘗試計算散列,它存儲在一個NSData對象中,然後被檢索並放回到散列字符串中。當我記錄hashedData時,我可以清楚地看到即將出現的結果 - 這看起來是正確的。這應該表明第四行出現了問題。但是什麼?任何幫助是極大的讚賞。

此致

雷因德

回答

3

SHA-1是一個20字節的二進制塊,而不是一個有效的UTF-8字符串。這就是NSString的initWithData:encoding:失敗的原因。通常用於表示哈希和的通常是HEX字符串。基本上,你需要的是[hashedData description]

+0

輝煌,有道理。謝謝! – 2011-01-29 14:16:05