1

このリンクを使用して、C++ を使用して任意のデータの SHA1 ハッシュを作成しました。ただし、SHA1 呼び出しからの出力バッファーは unsigned char* です。16 進数値、つまりメッセージ ダイジェスト値を保存して、他の操作に使用できるようにしたいと考えています。

これらは unsigned char* であるため、文字列に変換してから 16 進数変換を実行しても意味がありません。したがって、16 進変換を行ってから、値を文字列または char* として保存する必要があります。これどうやってするの?

SHA1(ibuf, strlen(ibuf), obuf);
for (i = 0; i < 20; i++) {
        printf("%02x ", obuf[i]);
4

1 に答える 1

3

にフォーマットするには、次char[]を使用しますsnprintf

char out[61]; //null terminator
for (i = 0; i < 20; i++) {
    snprintf(out+i*3, 4, "%02x ", obuf[i])
}

編集: 質問に C++ のタグを付けたようです。これは純粋な C ソリューションです。これは主に、私が C++ を知らないためです。

最大サイズ 4 を使用しているのは、(関数定義によって) そのカウントに null ターミネータを含める必要があるためです。null ターミネータを上書きするために、3 つだけ先に進みます。

末尾の余分なスペースは、 のフォーマット文字列に基づいて必然的に発生します"%02x "が、最後の要素を特殊なケースにすると、別のフォーマット文字列 を使用して"%02x"それを回避できます。

于 2012-06-27T23:39:11.427 に答える