如何从输出中删除换行符?

kpi*_*tru 3 shell

在shell中使用哈希密码(sha512)会破坏该行.如何在一行中获得结果?

散列脚本:

password="abc123"
hashPassw="$(/bin/echo -n "${password}" | openssl dgst -binary -sha512 | openssl enc -base64)"
echo "${hashPassw}"
Run Code Online (Sandbox Code Playgroud)

输出是(为什么打破了这条线?):

xwtd2ev7b1HQnUEytxcMnSB1CnhS8AaA9lZY8DEOgQBW5nY8NMmgCw6UAHb1RJXB
afwjAszrMSA5JxxDRpUH3A==
Run Code Online (Sandbox Code Playgroud)

应该是一行:

xwtd2ev7b1HQnUEytxcMnSB1CnhS8AaA9lZY8DEOgQBW5nY8NMmgCw6UAHb1RJXBafwjAszrMSA5JxxDRpUH3A==
Run Code Online (Sandbox Code Playgroud)

Dev*_*lar 6

为什么你认为它应该是一行?Base64 确实会换行。

如果您坚持,您的问题可以归结为“SHA512 SSL Base64 随便什么”到“如何删除换行符”,对此有很多方法,

tr -d '\n'
Run Code Online (Sandbox Code Playgroud)

只是其中之一。

  • @kpietru:仅供参考,Base64 的主要目的是为电子邮件传输编码二进制数据,这就是换行符的起源。 (3认同)

Jam*_*mes 6

来自OpenSSL Wiki for enc.

为了抑制这种情况,除-base64外还可以使用-A标志.这将生成一个完全没有换行符的文件.

所以添加额外的-A标志就可以了.

password="abc123"
hashPassw="$(/bin/echo -n "${password}" | openssl dgst -binary -sha512 | openssl enc -A -base64)"
echo "${hashPassw}"
Run Code Online (Sandbox Code Playgroud)

哪个输出

xwtd2ev7b1HQnUEytxcMnSB1CnhS8AaA9lZY8DEOgQBW5nY8NMmgCw6UAHb1RJXBafwjAszrMSA5JxxDRpUH3A==
Run Code Online (Sandbox Code Playgroud)