8A-25-A5-14-E9-E0-A8-02-0E-91-32-46-44-7E-EE-11
以上是散列文本。原文是“welcome1”。有人可以识别这里使用的算法吗?
根据这个站点,它显然是“welcome1”的 Unicode 表示的 md5 哈希
MD5(Unicode):
...
8a25a514e9e0a8020e913246447eee11:welcome1
具体来说,它是字符串“welcome1”的 UTF-16LE( UTF16 Little Endian)表示
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] output = md.digest("welcome1".getBytes("UTF-16LE"));
for(byte out: output){
System.out.printf("%x", out);
}
System.out.println();
输出:
8a25a514e9e0a82e913246447eee11
破折号不是哈希输出的一部分,只有十六进制字符。取出这些并在谷歌上搜索哈希通常会出现结果,特别是如果它是像“welcome1”这样的常用短语
这是一个很好的对象课程,说明为什么在处理散列算法时记住字符编码很重要,因为它们对字节而不是字符进行操作。在 ASCII 或 UTF8(甚至 UTF-16BE)中散列“welcome1”会导致输出截然不同,因为字符具有不同的底层字节表示。