1

我有一个 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=

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

在此先感谢您的帮助!

4

1 回答 1

8

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=
于 2012-09-14T19:36:21.507 回答