Base 64在Bash Shell中编码SHA-1哈希

时间:2012-09-14 18:58:20

标签: bash utf-8 base64 sha

我有一个Python命令,可以生成字符串的SHA-1哈希的URL安全base-64编码:

>>> import base64
>>> import sha
>>> base64.urlsafe_b64encode((sha.new("abc").digest()))
'qZk-NkcGgWq6PiVxeFDCbJzQ2J0='

我想在bash shell中做同样的事情,但我遇到了问题:

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=

我应该在这里做些什么来获得我期待的输出?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:7)

digest()与hexdigest()

不同
base64.urlsafe_b64encode((sha.new("abc").hexdigest()))
'YTk5OTNlMzY0NzA2ODE2YWJhM2UyNTcxNzg1MGMyNmM5Y2QwZDg5ZA=='

摘要的文档字符串:

Type:       builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form:<built-in method digest of _hashlib.HASH object at 0x1c88940>
Namespace:  Interactive
Docstring:  Return the digest value as a **string of binary data**.

编辑:尝试:

echo -n "abc"| openssl sha1 -binary | base64
qZk+NkcGgWq6PiVxeFDCbJzQ2J0=