我有一个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=
我应该在这里做些什么来获得我期待的输出?
提前感谢您的帮助!
答案 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=