2017-01-12 27 views
-1

Xcode C++でMD5を使用して単純な文字列をハッシュしたいと思います。私は多くを検索しましたが、私はチュートリアルを見つけることができませんでした。私は#import <CommonCrypto/CommonDigest.h>する必要があります。それはすべてですか?どのようにしてMD5を呼び出すことができますか? このコードが見つかりましたが、エラーが発生します。どのように私はハッシュ値を取得することは、文字列変数で更新されますか?Xcode C++ MD5ハッシュ

unsigned char digest[16]; 
const char* string = "Hello World"; 
struct MD5Context context;  **(error: variable has incomplete type 
MD5Init(&context); 
MD5Update(&context, string, strlen(string)); 
MD5Final(digest, &context); 

単純なコマンドラインアプリケーションを使用しているだけで、基本的なmain.cppの中にヘッダーはありません。 本当に助けていただきありがとうございます!!!!

+0

'#include'は、正しい関数名と型を使うように、おそらくC++コンパイラをより幸せにするでしょう。 CCのものはすべてCC_で始まります。 – WhozCraig

+0

ああ、ありがとうございました。 – Tom

+0

ありがとう私はこのマニュアルを見つけて、あなたが提案したとおりに更新しました。しかし、私はまだ変数のエラーを取得します。追加のライブラリを追加する必要がありますか? https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man3/CC_MD5.3cc.html#//apple_ref/doc/man/3cc/CC_MD5 – Tom

答えて

1

間違ったAPIを使用しています。私はあなたが(彼らは、OpenSSLの呼び出しのように見える)からのものを取得している場所がわからないんだけど、それは次のようになります。

#include <stdio.h> 
#include <string.h> 

#include <CommonCrypto/CommonDigest.h> 

int main() 
{ 
    unsigned char digest[CC_MD5_DIGEST_LENGTH]; 
    const char string[] = "Hello World"; 

    CC_MD5_CTX context; 
    CC_MD5_Init(&context); 
    CC_MD5_Update(&context, string, (CC_LONG)strlen(string)); 
    CC_MD5_Final(digest, &context); 

    for (size_t i=0; i<CC_MD5_DIGEST_LENGTH; ++i) 
     printf("%.2x", digest[i]); 
    fputc('\n', stdout); 
    return 0; 
} 

出力

b10a8db164e0754105b7a99be72e3fe5 

検証済みhere

1

ワンショットバージョンがあります:

#include <CommonCrypto/CommonDigest.h> 

unsigned char digest[16]; 
const char* string = "Hello World"; 

CC_MD5(string, (CC_LONG)strlen(string), digest); 

はあなたがSecurity.framework(またはリースに該当するライブラリファイル)を含める必要があります。

+0

お返事ありがとうございます!私はあなたの解決策を試しましたが、エラーメッセージが表示されます: "暗黙の変換は、unsigned intに整数精度のunsigned longを失い、最後の行のstrlen(文字列)を指します。(CC_LONG)strlenエラーしかし、私は印刷しようとするならば、それはのように私にいくつかのクレイジーなものを与えるダイジェスト:。の#include の#include の#include :261 \ 261D \ 215 \ ......私はこれらが含まれている\ #include 。 – Tom

+0

正しいキャストが必要でした。修正されました。MD5はデータを返し、ASCII出力が16進数またはBase64としてエンコードされている必要がある場合ほとんどのデータ値はASCIIではありません。 – zaph

+0

はい16進数が必要です。あなたが提案したように、MD5 fnで直接私にヘックスを出力する方法を教えてください。通常は、出力しかし私は私が何を変換しているのか分からない。ご協力ありがとうございました! – Tom

関連する問題