У меня есть команда Python, которая генерирует URL-безопасную кодировку base-64 хэша строки SHA-1:
>>> 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 (в шестнадцатеричном формате). Я думаю, что base64 читает 40 байт, но на самом деле он должен читать только 20. Я пытался передать его через iconv, но безуспешно:
me:~$ echo -n "abc" | sha1sum | sed 's/ .*//'
a9993e364706816aba3e25717850c26c9cd0d89d
me:~$ echo -n "abc" | sha1sum | sed 's/ .*//' | base64
YTk5OTNlMzY0NzA2ODE2YWJhM2UyNTcxNzg1MGMyNmM5Y2QwZDg5ZAo=
Что я должен делать здесь, чтобы получить результат, который я ожидаю?
Заранее спасибо за помощь!