管道sha256sum和base64

时间:2016-08-07 23:14:31

标签: bash pipe

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会这样做

1 个答案:

答案 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)