在Elixir中哈希MD5

joa*_*oan 20 elixir

在Elixir中,您可以获得字符串的md5:

ex(1)> :crypto.hash(:md5 , "Elixir") |> Base.encode16()
"A12EB062ECA9D1E6C69FCF8B603787C3"
Run Code Online (Sandbox Code Playgroud)

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

[~ ~]$echo 'Elixir' | md5
694f56f4b30e60837151723777795fc2
Run Code Online (Sandbox Code Playgroud)

当然我错过了什么.

Gaz*_*ler 51

echo命令将包含一个新行:

iex>:crypto.hash(:md5, "Elixir\n") |> Base.encode16()
"694F56F4B30E60837151723777795FC2"
Run Code Online (Sandbox Code Playgroud)

您可以使用case修改Base.encode16的大小写:

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

您可以使用-n标志echo来阻止新行:

$ echo -n 'Elixir' | md5sum
a12eb062eca9d1e6c69fcf8b603787c3  -
Run Code Online (Sandbox Code Playgroud)

  • md5实际上用不可打印的字符吐出二进制数据.为了使其可读,几乎每个程序都将二进制文件转换为基数16,基数16由16个字符(0-9,af)组成. (5认同)