将 Python SHA1 摘要代码重写为 Bash

问题描述 投票:0回答:1

在 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。

python bash hash sha1 openwrt
1个回答
0
投票

尝试这个 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"
© www.soinside.com 2019 - 2024. All rights reserved.