そのため、受信した添付ファイルのSHA1ダイジェストを計算し(base64エンコード)、ダイジェストと一致するようにします。 ChatGPTを使用して以下のコマンドを正常に使用できました。しかし、私はこのコマンドxxd -r -p
がなぜ必要なのか理解していません。
sha1sum foo | awk '{print $1}' | xxd -r -p | base64
私が理解していない2つのことがあります。
- なぜこのオプションが
-p
必要ですか? 16進ダンプのバイナリダンプを実行する方法を知っていますが、xxd -r
印刷しないと-p
何も印刷されず、マニュアルページにはstdoutとして印刷する必要があることがわかります。これは-p
特定の出力スタイルでのみ機能します。 - SHA1ダイジェストを渡す目的は何ですか
xxd
?私の理解は、xxd
本質的に16進数と2進数の間でデータを変換することです。ただし、を使用せずに上記のコマンドを実行すると、異なるxxd -r -p
一致しない出力が表示されます。私は16進スタイル/表現(SHA1ダイジェストの形式)が何であるかを知っていますが、この文脈で「バイナリ」が何を意味するのかわかりません。
答え1
xxd -r p
まず、私たちが扱っていることを理解するために入力を見てみましょう。例は次のとおりです。
echo boo | sha1sum | awk '{print $1}'
6132b58967cf1ebc05062492c17145e5ee9f82a8
この行は、次の SHA1 ハッシュを生成します。4つ文字boo
とその末尾の改行文字。
xxd
それでは、このコマンドを少し勉強しましょう。xxd
のマニュアルページ(参考資料を参照)では、man xxd
このxxd -r
コマンドがで生成された一般的な16進ダンプを元に戻すことを説明しますxxd
。したがって、次のパイプラインを構築できます。
echo boo | xxd | xxd -r
boo
それでは、次の2つの出力を比較してみましょう。
echo boo | xxd
00000000: 626f 6f0a boo.
echo boo | xxd -p
626f6f0a
2番目の出力をバイナリに反転するには、次のものが-r
必要です-p
。
echo boo | xxd -p | xxd -r -p
boo
スペースやその他の形式なしで16進バイトで生成されたこの構造は、の出力とxxd -p
正確に一致するため、sha1sum
この方法を使用してバイナリに変換できます。次に(最終的に)結果バイナリを渡してBase 64にbase64
変換します。
echo boo | sha1sum | awk '{print $1}' | xxd -r -p | base64
YTK1iWfPHrwFBiSSwXFF5e6fgqg=