2016-03-04 107 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==