2011-12-05 3 views
0

こんにちは、最愛のコミュニティ、Cocoaでは、CC_MD5で使用する文字列をエンコードするためにUTF-7を明示的に使用する方法はありますか?

私は文字列の正確なMD5を作成する問題に遭遇します。 PHPとC#のMD5と一致する必要があります。これを読んで:PHP MD5 not the same as .NET MD5、私は最初にUTF - 7エンコーディングを使用して文字列を変換する必要がありますね。しかし、現在私はNSStringがUTF-8だけをサポートしていることを知っています。これは、文字列からMD5を作成するための私のコードです:私は間違っていないよ場合[str UTF8String]を読んラインで、

-(NSString *) md5:(NSString *) str 
{ 
    const char *cStr = [str UTF8String]; 
    unsigned char result[16]; 
    CC_MD5(cStr, strlen(cStr), result); 
    return [NSString stringWithFormat: 
     @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", 
     result[0], result[1], result[2], result[3], 
     result[4], result[5], result[6], result[7], 
     result[8], result[9], result[10], result[11], 
     result[12], result[13], result[14], result[15] 
     ]; 
} 

だから、私は[str UTF7String]を読んで、何かにこれを変更する必要があります。私は正しいですか?ココアならその機能はありますか?現在のところ、私のグーグルではこれで良い結果は得られませんでした。

ありがとうございました

+1

あなたは '[STR dataUsingEncoding:NSUTF8StringEncoding]を使用して、この高速化することができます'とデータの 'length'を求めます。 'strlen'は高価です。 –

+0

ありがとう@PeterHosey。私は自分のコードを変更します!しかし、どのコードでstrlenを置き換えるのですか? – swdev

+0

私が言ったように、データにその「長さ」を尋ねます。 –

答えて

3

あなたがリンクしている投稿は間違いです。 MD5アルゴリズムはバイトブロックで動作し、それらのバイトが何を表すかについては何も知らない。

すべてを行う必要がある文字列はPHP、C#とココアで同じようにエンコードされていることを確認しています。 UTF-8を使用してください。そうした場合、文字列を表すバイトのMD5ハッシュは同じになります。

すべてのプラットフォームでUTF-8を使用していて、ハッシュが異なる場合は、データをMD5アルゴリズムに渡す方法やアルゴリズム自体の実装に問題がある可能性があります。 Mac OS XのCC_MD5機能は正しいと見なされます。

+0

この情報をお寄せいただきありがとうございます。私はMD5関数の入力を二重チェックします。私はすでにそれを確認していますが、どちらも同じです:C#とCocoa。しかし、私はPHPソースにアクセスすることができませんでしたので、私はC#ソースのみに依存しなければならないと思います。ありがとう、私は私の仕事の結果を通知します。 – swdev

+0

あなたは間違いなし!実際には、C#とCocoaの両方のハッシュ関数が同じ結果を生成します。私はC#をもう一度読んで、..文字列をハッシュする前に、まず文字列が暗号化されているというステップがありません! :) -epic failed ... MD5の動作を指摘してくれてありがとう! – swdev

関連する問題