Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何从用户输入中生成唯一字符串?_Algorithm_Unique_Uniqueidentifier_Unique Key - Fatal编程技术网

Algorithm 如何从用户输入中生成唯一字符串?

Algorithm 如何从用户输入中生成唯一字符串?,algorithm,unique,uniqueidentifier,unique-key,Algorithm,Unique,Uniqueidentifier,Unique Key,例如,用户可以提交$a、$b和$c。我需要从这些输入中创建一个唯一的字符串 如果我使用$uniq=$a$b$c,那么输入$a=AB,$b=CD,$c=EF和$a=a,$b=BCD,$c=EF都会生成$uniq=ABCDEF 如果我使用$uniq=$a |$b |$c,那么$a=AB,$b=CD,$c=EF |和$a=AB | CD,$b=EF,$c=”“/code>都会生成$uniq=AB | CD | EF 如何做到这一点?正确而安全的解决方案是为$a、$b和$c生成单独的散列值,然后通过连接

例如,用户可以提交
$a
$b
$c
。我需要从这些输入中创建一个唯一的字符串

如果我使用
$uniq=$a$b$c
,那么输入
$a=AB,$b=CD,$c=EF
$a=a,$b=BCD,$c=EF
都会生成
$uniq=ABCDEF

如果我使用
$uniq=$a |$b |$c
,那么
$a=AB,$b=CD,$c=EF |
$a=AB | CD,$b=EF,$c=”“/code>都会生成
$uniq=AB | CD | EF


如何做到这一点?

正确而安全的解决方案是为
$a
$b
$c
生成单独的散列值,然后通过连接或生成另一个散列将这些散列组合在一起

下面是一个算法:

$a_h = hash($a)
$b_h = hash($b)
$c_h = hash($c)
$uniq = hash($a_h$b_h$c_h)

根据您的要求,可能还需要添加“salt”以使其更加安全:

简单的解决方案:使用用户无法或不允许输入的分隔符-可能是控制字符。更复杂的是:在每个输入前加上自己的长度前缀(比如一个二进制字节,或者一个后跟冒号的十进制数,等等)。任何不允许用户输入的字符串都将起作用。这是一个众所周知的问题。考虑C字符串,在这里你必须“逃出”<代码> \ < /COD>字符。因此,如果您想打印字符串
“\hello\”
,您可以编写
put(“\\hello\”)
类似地,您可以使用
|
字符分隔用户的输入,如果用户输入
|
,则将其转换为
|
。当然,如果输出唯一的字符串,则需要进行反向转换。哈希值不是唯一的值。多个字符串可以散列为同一个值。虽然出现重复的可能性很小,但这种可能性是存在的。@JimMischel当然,这就是为什么会有完美的哈希函数;)另一方面,考虑从用户输入的3倍100K(如您在评论中建议的)连接的唯一值…无论如何,使用适当的哈希函数比任何直接用户输入使用都更安全。。。