【发布时间】:2012-09-15 03:41:33
【问题描述】:
我有一个 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=
我应该在这里做什么才能得到我期望的输出?
提前感谢您的帮助!
【问题讨论】:
-
从 Python 以十六进制打印 SHA1 不是更简单吗?这是这种特定数据类型的几乎通用的人类可读表示。