8A-25-A5-14-E9-E0-A8-02-0E-91-32-46-44-7E-EE-11
以上是散列文字。原文是“welcome1”。有人可以识别这里使用的算法吗?
答案 0 :(得分:2)
根据this site,它显然是“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”会导致输出异常不同,因为字符具有不同的基础字节表示。