2016-03-04 67 views
0

shell中的散列密码(sha512)破坏了密码。 如何在一行中获得结果?如何从输出中删除换行符?

哈希计算的脚本:

xwtd2ev7b1HQnUEytxcMnSB1CnhS8AaA9lZY8DEOgQBW5nY8NMmgCw6UAHb1RJXB 
afwjAszrMSA5JxxDRpUH3A== 

应该是一条线:

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

输出是(为什么打破行?)

xwtd2ev7b1HQnUEytxcMnSB1CnhS8AaA9lZY8DEOgQBW5nY8NMmgCw6UAHb1RJXBafwjAszrMSA5JxxDRpUH3A== 

回答

2

为什么你认为它应该是一条线? Base64包装线。

如果你坚持,你的问题从“SHA512 SSL Base64的任何”归结为“我怎么删除换行符”,对此有很多种方法,

tr -d '\n' 

只是其中之一。

+0

我的脚本创建密码的哈希 - 为用户proftpd的。 带有虚线的密码不授权用户。 我不知道base64可能会破坏。 – kpietru

+1

@kpietru:仅供参考,Base64的主要目的是为电子邮件传输编码二进制数据,这就是换行的起源。 – DevSolar

1

OpenSSL Wikienc

要抑制这一点,除了-base64之外,还可以使用-A标志。这将产生一个没有换行符的文件。

因此,添加额外的-A标志将会起作用。

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

,输出

xwtd2ev7b1HQnUEytxcMnSB1CnhS8AaA9lZY8DEOgQBW5nY8NMmgCw6UAHb1RJXBafwjAszrMSA5JxxDRpUH3A==