今天开发的时候需要用到MD5进行加密,印象中erlang是支持MD5加密算法的,但结果大失所望。
问题:一般MD5加密后得到的是32个字节的字符串,但erlang的MD5返回的是16个字节的 binary。
解决方法,老外写了一个转换函数:
-module(md5_string).
-export([md5_hex/1]).
md5_hex(S) ->
Md5_bin = erlang:md5(S),
Md5_list = binary_to_list(Md5_bin),
lists:flatten(list_to_hex(Md5_list)).
list_to_hex(L) ->
lists:map(fun(X) -> int_to_hex(X) end, L).
int_to_hex(N) when N < 256 ->
[hex(N div 16), hex(N rem 16)].
hex(N) when N < 10 ->
$0+N;
hex(N) when N >= 10, N < 16 ->
$a + (N-10).
问题:一般MD5加密后得到的是32个字节的字符串,但erlang的MD5返回的是16个字节的 binary。
解决方法,老外写了一个转换函数:
-module(md5_string).
-export([md5_hex/1]).
md5_hex(S) ->
Md5_bin = erlang:md5(S),
Md5_list = binary_to_list(Md5_bin),
lists:flatten(list_to_hex(Md5_list)).
list_to_hex(L) ->
lists:map(fun(X) -> int_to_hex(X) end, L).
int_to_hex(N) when N < 256 ->
[hex(N div 16), hex(N rem 16)].
hex(N) when N < 10 ->
$0+N;
hex(N) when N >= 10, N < 16 ->
$a + (N-10).