教程集 www.jiaochengji.com
教程集 >  脚本编程  >  java  >  正文 java中双hash减少用户名冲突示例

java中双hash减少用户名冲突示例

发布时间:2016-10-19   编辑:jiaochengji.com
教程集为您提供java中双hash减少用户名冲突示例等资源,欢迎您收藏本站,我们将为您提供最新的java中双hash减少用户名冲突示例资源
下面我们来为各位介绍java中双hash减少用户名冲突示例,希望这个例子对我们有帮助。


游戏中要去校验用户名是否重复,redis中放中文的key貌似蛮怪的吧,还是hash后放数字吧,从而校验是否冲突;

hash冲突 例如“Af”和“BG”哈希值相同,则有“AfAf”,“AfBG”,“BGAf”,“BGBG”的哈希值也相同

具体关于java的Hash冲突攻击 可以参考此文章:http://keary.cn/?p=845

不废话了,实际双hash用途很多,还有就是java中的自带hash会出现负数比如 (-8%3) 就为-2 依赖取模后的值就会出问题;

上代码:
 
package com.leeyz.idea.test;
 
public class TestHash {
  public static void main(String[] args) {
    String str = "中文";
    System.out.println(str.hashCode());
    System.out.println("s".hashCode());
    System.out.println("S".hashCode());
    System.out.println("cat".hashCode());
    System.out.println("Af".hashCode());
    System.out.println("BG".hashCode());
 
    System.out.println(FNVHash1Uint("Af"));
    System.out.println(FNVHash1Uint("BG"));
    System.out.println(mixHashULong("Af"));
    System.out.println(mixHashULong("BG"));
 
    System.out.println(-8%3);
  }
 
  public static long mixHashULong(String str) {
    long hash = (str.hashCode() & 0x7fffffff) * 1L;
    hash <<= 32;
    hash |= FNVHash1Uint(str);
    return hash;
  }
 
  public static int FNVHash1Uint(String str) {
    byte[] data = str.getBytes();
    final int p = 16777619;
    int hash = (int) 2166136261L;
    for (byte b : data)
      hash = (hash ^ b) * p;
    hash = hash << 13;
    hash ^= hash >> 7;
    hash = hash << 3;
    hash ^= hash >> 17;
    hash = hash << 5;
    return (hash & 0x7fffffff);
  }
}

您可能感兴趣的文章:
java中双hash减少用户名冲突示例
php字符串哈希函数算法实现代码
php hash算法实例分享
hash算法 consistent hashing 详解[图]
php哈希表及数组的介绍(附代码)
php数组实现原理
Golang map底层实现原理解析
redis基础问答
各版本MySQL并行复制的实现及优缺点
用缓冲技术提高JSP应用的性能和稳定性

[关闭]
~ ~