2016-03-21 1 views
9

Dans Elixir vous pouvez obtenir le md5 d'une chaîne:Hash MD5 dans Elixir

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

Mais pourquoi ne retourne pas la même valeur du terminal?

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

Bien sûr, il me manque quelque chose.

+1

Il est recommandé de ne plus utiliser MD5, mais SHA à la place. Plus d'informations à ce sujet: https://www.djm.org.uk/posts/cryptographic-hash-functions-elixir-generating-hex-digests-md5-sha1-sha2/ – Tilo

Répondre

29

La commande echo comprendra une nouvelle ligne:

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

Vous pouvez utiliser case pour modifier le cas de Base.encode16:

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

Vous pouvez utiliser le drapeau -n avec echo à empêcher la nouvelle ligne:

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

Vous pouvez également vous référer à https: // www .djm.org.uk/posts/cryptographique-hash-fonctions-elixir-produisant-hex-digests-md5-sha1-sha2/ –

+0

Pourquoi avez-vous utilisé 'Base.encode16()'? –