我目前遇到此問題,其中數據API提供者在通過iOS應用進行通信時請求SHA-1散列密碼。它大約95%的時間工作,但一些特殊字符造成很多頭痛。SHA-1在Objective-C和PHP中產生不同的結果......想法?
下面是產生不同的結果ABjnxQ^Lx2的%f8vb
從http://www.sha1.cz/密碼 - >48518a5be263c7a222f4863b66889019aa272191
從http://www.tools4noobs.com/online_php_functions/sha1/ - >b9b50de32d1bce1827a8e9d60ddbf4e0545fcb68
第二個是我的ObjC函數也返回了什麼。然而API提供者使用的PHP SHA1()獲取第一個。我已經縮小到這個樣本中有%
符號的事實。任何人都有與此有關的任何智慧?
這裏是我的Objective-C的功能:
- (NSString *)hashPassword:(NSString *)pass {
const char *cstr = [pass cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:pass.length];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, data.length, digest);
NSMutableString *output = [[NSMutableString alloc] initWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x", digest[i]];
return output;
}
之前你建議編碼,請注意,我試圖改變編碼類型爲ASCII,UTF8,16,32,和大多數其他的編碼類型在NSStringEncoding
enum中NSString.h
。
有人可以提供關於如何解決這個問題的解釋或建議嗎?先謝謝你!
當我使用php sha1函數時,我得到了'b9b50de32d1bce1827a8e9d60ddbf4e0545fcb68',我相信這是正確的,因爲我搜索的所有sha1哈希站點都給了這個,SQL服務器和mysql也給了這個 – elitechief21