我需要将密码转换为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