Php 哈希-始终获取给定用户ID对的唯一哈希

Php 哈希-始终获取给定用户ID对的唯一哈希,php,hash,Php,Hash,可能重复: 有没有办法散列两个用户ID(整数),并始终为给定的一对用户ID获取唯一的散列 例如: a = hash( x , y ); 及 在上面的示例中,对于INT(11)(MySQL)范围内的任何给定id对,a和b必须始终相等 普通PHP是编程环境 欢迎各位提出建议…使用 像这样: $hash=md5(sprintf(“%05d/%05d”,$id1,$id2))使用 像这样: $hash=md5(sprintf(“%05d/%05d”,$id1,$id2))对数字求和不会生成唯一的哈希

可能重复:

有没有办法散列两个用户ID(整数),并始终为给定的一对用户ID获取唯一的散列

例如:

a = hash( x , y );

在上面的示例中,对于INT(11)(MySQL)范围内的任何给定id对,a和b必须始终相等

普通PHP是编程环境

欢迎各位提出建议…

使用

像这样:
$hash=md5(sprintf(“%05d/%05d”,$id1,$id2))

使用

像这样:
$hash=md5(sprintf(“%05d/%05d”,$id1,$id2))

对数字求和不会生成唯一的哈希。例如,1+3==2+2。这是:

function myHash( $id1, $id2 ) {
    $ids = array( $id1, $id2 ); // or func_get_args() to support variable number
    sort( $ids );
    return md5( implode( '-', $ids ); // md5() == any other hashing function
}

myHash( x, y ) == myHash( y, x );

对这些数字求和不会产生唯一的散列。例如,1+3==2+2。这是:

function myHash( $id1, $id2 ) {
    $ids = array( $id1, $id2 ); // or func_get_args() to support variable number
    sort( $ids );
    return md5( implode( '-', $ids ); // md5() == any other hashing function
}

myHash( x, y ) == myHash( y, x );

INT(11)不存在。(11)只是显示宽度,并且由于(无符号)int的最大值为10个字符宽,因此它可能是零填充(指定时)为11个字符。更多但那是离题的INT(11)不存在。(11)只是显示宽度,并且由于(无符号)int的最大值为10个字符宽,因此它可能是零填充(指定时)为11个字符。更多但那是离题的这确实不太可能发生碰撞,但不能保证。(但如果您确实发现冲突,请将结果发布在加密杂志上-人们会对此非常感兴趣)。@user9876您可以“轻松”检查该函数是否存在冲突,因为输入集是已知的(-2147483648到2147483647表示int,0到4294967295表示unsigned int)。您可以运行一个测试来检查所有组合,并查看是否发生碰撞。但同样,你不必散列,你可以简单地存储“N1+分隔符+N2”,因为(至少一个MD5)散列会占用32个字符,所以存储应该不会有问题。这确实不太可能发生冲突,但不能保证。(但如果您确实发现冲突,请将结果发布在加密杂志上-人们会对此非常感兴趣)。@user9876您可以“轻松”检查该函数是否存在冲突,因为输入集是已知的(-2147483648到2147483647表示int,0到4294967295表示unsigned int)。您可以运行一个测试来检查所有组合,并查看是否发生碰撞。但是,同样地,您不必散列,您可以简单地存储“N1+分隔符+N2”,并且由于(至少一个MD5)散列将占用32个字符,因此存储应该不会有问题。