我有一个16字节的数组,是从MD5 JAVA方法得到的。我想将它转换为long类型以用作哈希键。对64位进行按位异或操作是一个好主意...然后如何从中获取long类型的值?请提供完整的按位异或和转换为long类型的代码示例。
我有一个16字节的数组,是从MD5 JAVA方法得到的。我想将它转换为long类型以用作哈希键。对64位进行按位异或操作是一个好主意...然后如何从中获取long类型的值?请提供完整的按位异或和转换为long类型的代码示例。
long a = md5[0] +
256 * md5[1] +
256 * 256 * md5[2] +
256 * 256 * 256 * md5[3] +
256 * 256 * 256 * 256 * md5[4] +
256 * 256 * 256 * 256 * 256 * md5[5] +
256 * 256 * 256 * 256 * 256 * 256 * md5[6] +
256 * 256 * 256 * 256 * 256 * 256 * 256 * md5[7];
long b = md5[8] +
256 * md5[9] +
256 * 256 * md5[10] +
256 * 256 * 256 * md5[11] +
256 * 256 * 256 * 256 * md5[12] +
256 * 256 * 256 * 256 * 256 * md5[13] +
256 * 256 * 256 * 256 * 256 * 256 * md5[14] +
256 * 256 * 256 * 256 * 256 * 256 * 256 * md5[15];
long result = a ^ b;
请注意,我没有试图处理endianness。但是,如果您只关心在特定平台上获得一致的哈希值,则大小端字节序不应该影响。
Guava拥有一些非常好用的哈希功能:
Hashing.md5().hashString(s).asLong();
我相信上述实际上是 CityHash,但无论如何它都会生成哈希长整型值,以供您在任何哈希需求中使用。(我尝试了 @Eric J. 的 Java 代码,看起来像是 CityHash 32)。
为了明确起见,加密摘要的任何子部分都不再具有许多摘要的加密属性,具体而言,这些属性不再成立: