2016-03-21 104 views
9

在灵药,你可以得到一个字符串的MD5:MD5哈希在药剂

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

但是,为什么不从终端返回相同的值?

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

确定我错过了什么。

+1

建议不要再使用MD5,而应使用SHA。关于此的更多背景信息:https://www.djm.org.uk/posts/cryptographic-hash-functions-elixir-generating-hex-digests-md5-sha1-sha2/ – Tilo

回答

29

echo命令将包括一个新行:

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

您可以使用case修改的Base.encode16情况:

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

您可以使用-n标志与echo到防止新行:

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

您也可以参考https:// www .djm.org.uk/posts/cryptographic-hash-functions-elixir-generating-hex-digests-md5-sha1-sha2/ –

+0

你为什么使用'Base.encode16()'? –