Muz*_*hua 5 javascript erlang yaws mnesia
在这里测试MD5的Javascript实现: http://www.webtoolkit.info/javascript-md5.html给出以下输出:
MD5("muzaaya") = "00e081abefbbbf72b2d5258196a9b6d0"
转到我的erlang shell,并计算相同值的MD5我得到这个:
Eshell V5.8.4 (abort with ^G)
1> erlang:md5("muzaaya").
<<0,224,129,171,239,187,191,114,178,213,37,129,150,169,
182,208>>
2>
我怎么能比较这两个?如果来自JavaScript前端应用程序的MD5结果来到我的Erlang后端,我希望能够比较两个摘要.如何将Javascript MD5摘要与Erlang的摘要相匹配?
Ada*_*erg 16
MD5哈希本质上是128位数.
您在Erlang中收到的MD5值为16字节的二进制(16*8 = 128位).该二进制文件中的每个字节都必须转换为十六进制表示,以与JavaScript的MD5输出(每个字节有两个字符的十六进制字符串)相媲美:
2> lists:flatten([io_lib:format("~2.16.0b", [B]) || <<B>> <= MD5]).
"00e081abefbbbf72b2d5258196a9b6d0"
Run Code Online (Sandbox Code Playgroud)
首先,我们从二进制文件中获取每个字节,然后使用该io_lib模块将其格式化为十六进制字符串.然后我们使用flatten函数将其显示为可读字符串(尽管如果您要将值写入文件或套接字,这是不必要的,因为它们能够处理深度io列表,嵌套字符列表或二进制文件).
使用的格式字符串~2.16.0b表示b使用base 格式化integer(),使用padding字符16填充宽度(请参阅完整指南).20io:format/3
如果你想要一个二进制文件,你可以使用以下二进制理解:
3> << << (list_to_binary(io_lib:format("~2.16.0b", [C])))/binary >>
|| <<C>> <= MD5 >>.
<<"00e081abefbbbf72b2d5258196a9b6d0">>
Run Code Online (Sandbox Code Playgroud)
(而不是io_lib:format/2也有http_util:integer_to_hexlist/1,虽然我不知道它是否更快)
| 归档时间: |
|
| 查看次数: |
2120 次 |
| 最近记录: |