2017-04-14 8 views
0

ファイルを作成してランダムな文字列を入力しました。私はbase64ハッシュ[sha256]を計算するためにopensslを使用する場合与えられたハッシュからのbase64エンコードされたハッシュを計算しますか?

touch tesseract && echo 'TestTestTestTestTest' > tesseract 

は今、私はこれを実行します。

cat tesseract | openssl dgst -sha256 | openssl base64 -A 

今、私はこのハッシュを段階的に処理してくれ

KHN0ZGluKT0gMzJjYjA1MTgzNDNhZmY2N2FlMmY5YzUwNDcwNGRiNGE5Njc5MzIyZWVlNTBmMjBiNTMzNjZlYTBiMDY2MWNlZgo=

を返します、as、

cat tesseract | openssl dgst -sha256 > partialHash 

このハッシュはXとする私に

(stdin)= 32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef

を与えます。 は、それから私は

echo '32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef' > partialHash 
cat partialHash | openssl base64 -A 

は、私は別の結果を取得し、これを行います。何故ですか?私は私が32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cefの形でハッシュ与えバイナリ、hashdeepを使用して、私はhashdeepとしてbase64エンコードされた形式に変換したいbase64出力を生成することが可能ではないので尋ねるため

私の理由があります。だから、中間のハッシュをopenssl base64 -Aにパイプするが、別の結果を得る。

私には何が欠けていますか? X [32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef]のコード化されていないハッシュを適切なbase64エンコード形式に変換するにはどうすればよいですか?単純化の目的のために

、我々はX
あなたはベース64をしていないハッシュをコードするecho '32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef' > file

+0

Stack Overflowはプログラミングと開発の質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。また、[Dev Opsについての質問はどこに投稿しますか?](http://meta.stackexchange.com/q/134306) – jww

答えて

2

を使用して作成し、ファイル内に存在すると仮定することができます。文字列をbase64でエンコーディングしています。

(stdin)= 32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef 

(その後に改行が続きます)。最初に(stdin)=に注意してください。それは文字列の一部です。これは、文字列32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cefのbase64エンコーディング(改行が続く)とは異なる値になります。

文字列エンコードではなく、バイナリハッシュを取得することを目標にしている場合は、openssl dgst-binaryオプションを使用します。

私はhashdeepに精通していませんが、 "非エンコードハッシュ"と言うとき、それは生成していないものです。これは、16進数のハッシュを生成しています。見た目では、実際には16進から64へのコンバータを探しています。あなたはこれらの線に沿ってそれを行うことができます。

echo '32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef' | xxd -r -p | base64 

xxd -r -pは、生データに16進数でエンコードされた文字列に変換します。

openssl dgstを使用している場合は、前面に(stdin)=を注入しないオプションを使用していることを確認してください。opensslの私のバージョンはこれをしないので、必要なフラグはわかりません。)

+0

質問を不適切に表現することに対する謝罪。私が聞きたいことを理解してくれてありがとう。私はちょうどそれを試して、それは完全に働いた。私は 'xxd'コマンドに慣れていませんでした。再度、感謝します。 – Ozil

関連する問題