Open2

コマンドラインでSHA256のhex文字列をBase64エンコードする

Somme4096Somme4096

今までパスワード生成の際にはSHA256/Base64変換のWebサービスを利用していたのですが、機密情報をWebサービスに預けるのは結構不安なので、ローカルのコマンドラインで変換する方法を模索してみました。

こちら(https://stackoverflow.com/questions/71042721/how-to-base64-encode-a-sha256-hex-character-string) の説明を参考に

printf yourstring | sha256sum | cut -d ' ' -f 1 | xxd -r -p | base64
Somme4096Somme4096

上記のコマンドが問題なく動作することは分かりましたので、とりあえずメモを残します。

  • まずはprintf yourstringで文字列を出力 (echo -n 'yourstring'でもいいかも)
  • 次にsha256sumで文字列をSHA256ハッシュに変換します(どうやらsha256sumコマンドは環境依存のようで、一部環境ではshasumを使う必要があるそうです)
  • cut -d ' ' -f 1で最後尾の -を消します。実際にコマンド出力を見てみるとこんな感じ。
$ printf teststring | sha256sum 
3c8727e019a42b444667a587b6001251becadabbb36bfed8087a92c18882d111  -

$ printf teststring | sha256sum | cut -d ' ' -f 1
3c8727e019a42b444667a587b6001251becadabbb36bfed8087a92c18882d111
  • 続けてxxd -r -pで出力された文字列をバイナリダンプします。xxdコマンドは文字列(orファイル)を十六進数に(またはその逆に)ダンプするコマンドで、ここでは-r(--revert)引数がついてるため、先ほど出力された十六進数の文字列を二進数に変換していることがわかります。
  • 最後にbase64コマンドでBase64エンコードします。