在 Debian 机器上,我运行以下 Python 代码:
#!/usr/bin/env python3
text_in = "abcd".encode('utf8')
sha1 = hashlib.sha1()
sha1.update(text_in)
raw_digest = sha1.digest()
text_out = base64.b64encode(raw_digest)
print( "text_in: " + str(text_in) )
print( "text_out: " + str(text_out) )
以下是Python代码的结果:
text_in: abcd
text_out: gf6L/odXbD7LIkJvjleEc4KRes8=
这是真的。
我正在尝试将此 Python 代码重写为 Bash 代码:
#!/bin/sh
TEXT_IN="abcd"
DIGEST=$( echo -n "$TEXT_IN" | sha1sum | awk '{print $1}' )
TEXT_OUT=$( echo -n "$DIGEST" | base64 )
echo "TEXT_IN: $TEXT_IN"
echo "TEXT_OUT: $TEXT_OUT"
下面是我的 Bash 代码的结果:
TEXT_IN: abcd
TEXT_OUT: ODFmZThiZmU4NzU3NmMzZWNiMjI0MjZmOGU1Nzg0NzM4MjkxN2FjZg==
这是错误的。
我需要在 OpenWRT 中运行此 Bash 代码,该代码占用的磁盘空间较小,并且在脚本、轻量级软件和简单的解决方案中使用简单的代码。
请帮我将此代码从 Python 重写为 Bash。
尝试这个 Shellcheck-clean (除了关于在
printf
格式字符串中使用变量的虚假警告)POSIX shell 代码:
#!/bin/sh -
text_in='abcd'
printf_fmt=$(printf '%s' "$text_in" | sha1sum \
| sed -e 's/[[:space:]].*$//' -e 's/../\\x&/g')
text_out=$(printf "$printf_fmt" | base64)
printf 'text_in: %s\n' "$text_in"
printf 'text_out: %s\n' "$text_out"