password="admin"
password_shasum=$(echo -n $password | shasum -a 256 | awk '{print $1}')
password_hashed=$(echo -n $password_shasum | openssl base64 -A)
给出了预期的正确结果:OGM2OTc2ZTViNTQxMDQxNWJkZTkwOGJkNGRlZTE1ZGZiMTY3YTljODczZmM0YmI4YTgxZjZmMmFiNDQ4YTkxOA==
OR
password="admin"
password_hashed=$(echo -n $password | shasum -a 256 | awk '{print $1}' | openssl base64 -A )
给出了意想不到的错误结果:
OGM2OTc2ZTViNTQxMDQxNWJkZTkwOGJkNGRlZTE1ZGZiMTY3YTljODczZmM0YmI4YTgxZjZmMmFiNDQ4YTkxOAo=
我需要理解为什么Bash会这样做
答案 0 :(得分:2)
awk
ORS默认为\n
,这是您正在编码的字符串中包含的内容...您需要将其删除。
如果您真的想使用print
,则需要将ORS更改为空字符串:
password="admin"
password_hashed=$(echo -n "$password" | shasum -a 256 | awk 'BEGIN {ORS=""} {print $1}' | openssl base64 -A)
或者您可以改为使用printf
:
password="admin"
password_hashed=$(echo -n "$password" | shasum -a 256 | awk '{printf "%s",$1}' | openssl base64 -A)