共计 1046 个字符,预计需要花费 3 分钟才能阅读完成。
简介
MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。与其它流行的哈希函数相比,对于规律性较强的 key,MurmurHash 的随机分布特征表现更良好。
家族成员
MurmurHash1, MurmurHash2, MurmurHash3
计算 mmh3 十六进制字符串
Python3
>>> import binascii | |
>>> import mmh3 | |
>>> binascii.b2a_hex(mmh3.hash_bytes('CN305183362S')).decode('utf8') | |
'a4fb17cba6d455e4812ad28989780cbc' # 32 个字符,128 bit |
Java
import java.math.BigInteger; | |
import org.apache.commons.lang.ArrayUtils; | |
public class AppTester {public static void main(String[] args) {final byte[] origin = "CN305183362S".getBytes(); | |
long[] vec = org.apache.commons.codec.digest.MurmurHash3.hash128(origin, 0, origin.length, 0); | |
// 将 long 转换为 BigInteger | |
BigInteger bigInteger0 = BigInteger.valueOf(vec[0]); | |
BigInteger bigInteger1 = BigInteger.valueOf(vec[1]); | |
// 将 BigInteger 转换为 byte[] | |
byte[] array0 = bigInteger0.toByteArray(); | |
byte[] array1 = bigInteger1.toByteArray(); | |
// 翻转 byte[] | |
ArrayUtils.reverse(array0); | |
ArrayUtils.reverse(array1); | |
// 将 byte[] 转换为无符号整数,并转为十六进制字符串 | |
String part0 = (new BigInteger(1, array0)).toString(16); | |
String part1 = (new BigInteger(1, array1)).toString(16); | |
System.out.println(part0 + part1); // a4fb17cba6d455e4812ad28989780cbc | |
} | |
} |
本文出处 walker snapshot
正文完