如何在长生不老药中的地图上创建“哈希”或“ md5”?

Arpit

我需要将转换maphash/md5

map1 = %{k1: "val1", k2: "val2"}
map2 = %{k2: "val2", k1: "val1"}

上面两个地图都一样,在地图中顺序无关紧要。如何从地图创建哈希,以使它们的哈希也相同?

我需要这样做是为了缓存。

亚当·米勒奇普

对于MD5:

:crypto.hash(:md5, :erlang.term_to_binary(%{k1: "val1", k2: "val2"}))
=> <<225, 87, 188, 155, 209, 54, 124, 25, 115, 196, 104, 11, 221, 200, 140, 247>>

您可以根据需要Base将其编码为字符串:

:crypto.hash(:md5, :erlang.term_to_binary(map)) |> Base.encode64
=> "4Ve8m9E2fBlzxGgL3ciM9w=="
:crypto.hash(:md5, :erlang.term_to_binary(map)) |> Base.encode16
=> "E157BC9BD1367C1973C4680BDDC88CF7

:crypto.hash/2可与 :sha:sha256:blake2b等。


上面两个地图都一样,在地图中顺序无关紧要。如何从地图创建哈希,以使它们的哈希也相同?

值得指出的是,映射在Elixir / Erlang中是无序的,因此示例中的两个映射在内部生成相同的映射-源代码中键的顺序无关紧要:

%{k1: "val1", k2: "val2"} == %{k2: "val2", k1: "val1"}
=> true

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章