文字列のSHA-1ハッシュのURLセーフなbase-64エンコーディングを生成するPythonコマンドがあります。
>>> import base64
>>> import sha
>>> base64.urlsafe_b64encode((sha.new("abc").digest()))
'qZk-NkcGgWq6PiVxeFDCbJzQ2J0='
bashシェルでも同じことをしたいのですが、問題が発生しています。
me:~$ echo -n "abc" | sha1sum | sed 's/ .*//'
a9993e364706816aba3e25717850c26c9cd0d89d
me:~$ echo -n "abc" | sha1sum | sed 's/ .*//' | base64
YTk5OTNlMzY0NzA2ODE2YWJhM2UyNTcxNzg1MGMyNmM5Y2QwZDg5ZAo=
これは、sha1sumが(16進形式で)出力される方法が原因であると思われます。base64は40バイトを読み取っていると思いますが、実際には20バイトしか読み取っていないはずです。iconvを介してパイプ処理を試みましたが、成功しませんでした。
me:~$ echo -n "abc" | sha1sum | sed 's/ .*//'
a9993e364706816aba3e25717850c26c9cd0d89d
me:~$ echo -n "abc" | sha1sum | sed 's/ .*//' | base64
YTk5OTNlMzY0NzA2ODE2YWJhM2UyNTcxNzg1MGMyNmM5Y2QwZDg5ZAo=
期待する出力を得るために、ここで何をすべきですか?
助けてくれてありがとう!