2017-03-16 20 views
0

16進またはASCII表現を使用して、コンソールにバイナリハッシュ表現を記録します。アルゴリズムはMD5なので、関数はCC_MD5Objective-cのHEX/Asciiへのバイナリハッシュ表現

私はTheos tweakでバイナリハッシュ表現を得ていますが、これはうまくいきます。

編集:この調整はCC_MD5コールを傍受します。呼び出しは、以下に説明するメソッドで実装されます。 CC_MD5が呼び出されると、replaced_CC_MD5がコールを代行受信します。

テストアプリ、私は自分自身を作り、MD5ハッシュを計算するために、このメソッドを使用していますシンプルなアプリです:それは大丈夫だ

- (NSString *) md5:(NSString *) input 
{ 
    const char *cStr = [input UTF8String]; 
    unsigned char digest[16]; 
    CC_MD5(cStr, strlen(cStr), digest); // This is the md5 call 

    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; 

    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) 
     [output appendFormat:@"%02x", digest[i]]; 

    return output; 

} 

ハッシング、そして私にアプリ戻っ入力のための正しいハッシュ

input = prova 
MD5 Digest = 189bbbb00c5f1fb7fba9ad9285f193d1 

私はCC_MD5機能が

EDITで操作する私のTHEOS微調整での機能:datacStrlenstrlen(cStr)mddigestとなります。

static unsigned char * replaced_CC_MD5(const void *data, CC_LONG len, unsigned char *md) { 
    CC_LONG dataLength = (size_t) len; 
    NSLog(@"==== START CC_MD5 HOOK ===="); 

    // hex of digest 
    NSData *dataDigest = [NSData dataWithBytes:(const void *)md length:(NSUInteger)CC_MD5_DIGEST_LENGTH]; 
    NSLog(@"%@", dataDigest); 

    // hex of string 
    NSData *dataString = [NSData dataWithBytes:(const void *)data length:(NSUInteger)dataLength]; 
    NSLog(@"%@", dataString); 

    NSLog(@"==== END CC_MD5 HOOK ===="); 

    return original_CC_MD5(data, len, md); 

} 

dataStringのログそれは大丈夫だ:dataDigestのログは、私は理解している場合、あるe9aa0800 01000000 b8c00800 01000000バイナリハッシュ表現であるprova のHEX表現がある70726f76 61を。

この表現をMD5ハッシュダイジェストに変換するにはどうすればよいですか?

+0

'置き換え_CC_MD5' *に' md'を表示していませんか?あなたは 'original_CC_md 'それはその価値を提供していますか? – CRD

+0

正確、多かれ少なかれ:)私は 'md'の**バイナリ**ハッシュ表現を表示していますが、私はこの値の16進数またはASCIIの表現になります。 'original_CC_MD5'それは私のものの後に通常の関数を返すために呼び出されます – strano

+0

あなたが表示している値は' replaced_CC_MD5'に渡された16バイトの* hex *です。あなたの質問には、その値がどこから来るのかを示すものは何もなく、 'CC_MD5'に基づいて' md'が*出力*パラメータであると思われるので、最初のコメントです。しかし、意味のある値を渡している場合は、質問が何であるか、どこから来ているかなどを編集する必要があります。 – CRD

答えて

0

replaced_CC_MD5では、その値を設定しますoriginal_CC_MD5からmd前にコールが表示されます。したがって、あなたが見ているものはランダムなデータです(または最後に格納されたものはmdです)。

original_CC_MD5への呼び出しをdisplayステートメントの前に移動すると、期待する値が表示されます。 (returnステートメントの値を返すことができるように、呼び出し結果をローカルに保存する必要があります)

関連する問題