2016-08-07 31 views
1
password="admin" 
password_shasum=$(echo -n $password | shasum -a 256 | awk '{print $1}') 
password_hashed=$(echo -n $password_shasum | openssl base64 -A) 

ergeben korrektes Ergebnis zu erwarten: OGM2OTc2ZTViNTQxMDQxNWJkZTkwOGJkNGRlZTE1ZGZiMTY3YTljODczZmM0YmI4YTgxZjZmMmFiNDQ4YTkxOA==Piping sha256sum und base64

ODER

password="admin" 
password_hashed=$(echo -n $password | shasum -a 256 | awk '{print $1}' | openssl base64 -A) 

gibt unerwartetes falsches Ergebnis:

OGM2OTc2ZTViNTQxMDQxNWJkZTkwOGJkNGRlZTE1ZGZiMTY3YTljODczZmM0YmI4YTgxZjZmMmFiNDQ4YTkxOAo= 

i verstehen muß, warum Bash auf diese Weise verhält sich

+0

'Echo -n' entfernt das Newline. 'awk' enthält einen abschließenden Zeilenumbruch. Warum codiert base64 hexadezimalen Text? – Ryan

+0

ok, also wie kann ich oberkorrektes Ergebnis in einer Zeile erreichen? (Anbieter Anforderung, ich konnte nicht wählen) – ondrej

Antwort

2

Die awk ORS ist standardmäßig \n, was in der Zeichenfolge enthalten ist, die Sie codieren ... Sie müssen das entfernen.

Wenn Sie wirklich wollen print Sie ORS müssen verwenden, um leere Zeichenfolge zu ändern:

password="admin" 
password_hashed=$(echo -n "$password" | shasum -a 256 | awk 'BEGIN {ORS=""} {print $1}' | openssl base64 -A) 

Oder Sie printf stattdessen verwenden können:

password="admin" 
password_hashed=$(echo -n "$password" | shasum -a 256 | awk '{printf "%s",$1}' | openssl base64 -A) 
+1

Gelöst dann, sehr nützliche Informationen, danke – ondrej