2016-04-25 8 views
1

Ich versuche, MD5 in Python und Shell (zsh unter OSX) zu verwenden.Wie hasse ich eine Zeichenkette, ohne ein abschließendes ' n' hinzuzufügen?

Ich habe dies:

In Python:

>>> hashlib.md5("zoo".encode('utf-8')).hexdigest() 
'd2cbe65f53da8607e64173c1a83394fe' 

mit Zsh:

$ echo "zoo" | md5 
ace34ff0a763d9f382cbe6b219fcac7c 

Da ich auch:

>>> hashlib.md5("zoo\n".encode('utf-8')).hexdigest() 
'ace34ff0a763d9f382cbe6b219fcac7c' 

in Python, ich denke, dass meine Zsh-Befehl eine zusätzliche (unerwünschte) '\ n' vor dem Hashing der Zeichenfolge hinzugefügt.

Warum passiert das und wie könnte ich das vermeiden?

Antwort

3

hier gehen Sie:

kent$ echo -n 'zoo'|md5sum 
d2cbe65f53da8607e64173c1a83394fe 

kent$ echo 'zoo'|md5sum 
ace34ff0a763d9f382cbe6b219fcac7c 
+0

So war es mehr ein 'echo' Problem als ein' md5' Problem. Ich kannte die "-n" Flagge nicht, danke für die Information! Ich habe keine md5sum auf meinem Betriebssystem, aber es ändert nichts wirklich mit MD5. – vmonteco

+0

@vmonteco Ich habe keine md5 hier ..^_ * .. Ich denke, Sie sollten nicht md5 Befehl/Funktion, um die Zeichenfolge zu behandeln, es berechnet nur die MD5 Digest mit ** gegeben ** Zeichenfolge. Wenn die Zeichenfolge Newline enthält oder nicht, liegt es an Ihnen: der Eingabebefehl – Kent

+0

Dies ist sinnvoll. :) Trotzdem nützlich um beide Lösungen zu kennen! Danke für Ihre Hilfe. – vmonteco

2

I gerade herausgefunden:

md5 Befehl hat einen -s Flag, das ein Argument direkt als Zeichenkette passieren erlaubt.

So:

$ md5 -s "zoo" 
MD5 ("zoo") = d2cbe65f53da8607e64173c1a83394fe 

Ziemlich dumm, mein schlecht.