2016-03-21 23 views
9

W Elixir można uzyskać MD5 ciąg:Hash MD5 w Elixir

ex(1)> :crypto.hash(:md5 , "Elixir") |> Base.encode16() 
"A12EB062ECA9D1E6C69FCF8B603787C3" 

Ale dlaczego nie zwraca taką samą wartość od terminalu?

[~ ~]$echo 'Elixir' | md5 
694f56f4b30e60837151723777795fc2 

Pewnie czegoś brakuje.

+1

Nie zaleca się używania MD5, ale zamiast tego SHA. Więcej informacji na ten temat: https://www.djm.org.uk/posts/cryptographic-hash-functions-elixir-generating-hex-digests-md5-sha1-sha2/ – Tilo

Odpowiedz

29

Komenda echo obejmie nową linię:

iex>:crypto.hash(:md5, "Elixir\n") |> Base.encode16() 
"694F56F4B30E60837151723777795FC2" 

Można użyć case zmodyfikować przypadek Base.encode16:

iex>:crypto.hash(:md5, "Elixir\n") |> Base.encode16(case: :lower) 
"694f56f4b30e60837151723777795fc2" 

Możesz użyć flagi -n z echo do zapobiec nowej linii:

$ echo -n 'Elixir' | md5sum 
a12eb062eca9d1e6c69fcf8b603787c3 - 
+0

Możesz także sprawdzić https: // www .djm.org.uk/posts/funkcje kryptograficzne-funkcje-eliksir generujący-hex-digests-md5-sha1-sha2/ –

+0

Dlaczego użyłeś 'Base.encode16()'? –