パスワードを MD5 ハッシュに変換し、Web サービスから取得した MD5 ハッシュと比較する必要があります。この 2 つが一致すると、ユーザーはログインできます。
ユーザーのパスワードが「 cat 」であるとしましょう。それからハッシュを作成すると、 が得られd077f244def8a70e5ea758bd8352fcd8
ます。これは、Web サービスから受け取ったハッシュと同じです。これで、MD5 を作成するためのコードが正しいことがわかりました。
ただし、パスワードが「çàt」の場合、次のハッシュを取得します: 727f8e931135b44b37eb147c8a7a56af
. Web サービスは次のハッシュを返します: f571ca52b4e3c5a6f49675deaea89cac
.
それが問題です。何らかの理由で、同じ単語のこれら 2 つのハッシュが異なります。そのようなことが可能であることさえ知りませんでした。ただし、パスワードにアクセントやその他の奇妙な文字がある場合にのみ発生するため、エンコードに関係があると思います.
私は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];
ここにあります:NSStringを使用してUTF-8エンコーディングをISO 8859-1エンコーディングに変換します
しかし、それでは正しいハッシュも得られません。
可能なすべての NSString エンコーディングを試しましたが、どれも正しいハッシュを返しませんでした。
それで、これについて何ができるでしょうか。エンコーディングを変換するコードに何か問題がありますか? それとも、エンコーディングとは何の関係もないのでしょうか (他のエンコーディングを試してもうまくいかないため)?