我需要將密碼轉換爲MD5哈希,並將其與我從Web服務獲得的MD5哈希進行比較。 如果這兩個匹配,用戶可以登錄。從字符串MD5哈希不匹配
假設用戶的密碼是'cat'。如果我做了一個哈希,我得到了d077f244def8a70e5ea758bd8352fcd8
。這等於我從web服務收到的散列。現在我知道創建MD5的代碼是正確的。
但是,當密碼是'çàt',我得到這個哈希:727f8e931135b44b37eb147c8a7a56af
。 web服務給我回這個哈希:f571ca52b4e3c5a6f49675deaea89cac
。
所以這就是問題所在。由於某些原因,這兩個同一個詞的哈希值是不同的,不知道這樣的事情甚至是可能的。 它只發生在密碼中有口音或其他奇怪的字符時,所以我認爲它與編碼有關。
我嘗試使用NSISOLatin1StringEncoding
這樣的:
NSString *string = [NSString stringWithFormat:@"çàt"];
char converted[([string length] + 1)];
[string getCString:converted maxLength:([string length] + 1) encoding: NSISOLatin1StringEncoding];
NSString *converted_str = [NSString stringWithCString:converted encoding:NSISOLatin1StringEncoding];
這裏找到:Convert UTF-8 encoding to ISO 8859-1 encoding with NSString
但是,這並沒有給我正確的哈希無論是。
我嘗試了所有可能的NSString編碼,但沒有一個em返回正確的散列。
那麼我能做些什麼呢。用於轉換編碼的代碼有問題嗎?或者,它可能與編碼沒有任何關係(因爲嘗試其他編碼不起作用)?
讓我們在Google中輸入'd077f244def8a70e5ea758bd8352fcd8',你就會明白爲什麼密碼不能用MD5散列,特別是沒有鹽。有像BCrypt或PBKDF2這樣的密鑰派生函數用於哈希密碼。 – martinstoeckli