edi*_*igu 2 php arrays encryption algorithm hash
我正在尝试生成像我的应用程序中使用的youtube视频ID的短字符串哈希,但我无法弄清楚什么是最快和最简单的方法,同时使用数组或基于json的字符串提供最短的哈希.
我读了Kevin van Zonneveld 关于这个主题的优秀文章,他根据整数生成alphaID,它有两种方式.还有很好的答案,但我的情况有点不同:
对于数据库中的每个唯一记录,有很多(超过100K)但很小的数据集(数组):
$id = 1;
$set[$id] = array(533 => array('a' => 78), 460 => array('a' => 89));
$set[$id] = array(534 => array('b' => 79), 620 => array('a' => 908));
$set[$id] = array(535 => array('a' => 80), 782 => array('c' => 901));
$id = 2;
$set[$id] = array(672 => array('a' => 12), 852 => array('a' => 122));
$set[$id] = array(542 => array('a' => 67), 372 => array('a' => 831));
$set[$id] = array(573 => array('a' => 77), 853 => array('a' => 127));
// ...
Run Code Online (Sandbox Code Playgroud)1:aeF4t,2:eaXvT,3:t4fa.同一id下的唯一性很重要.例如:
1:aeF4t并且2:aeF4t没关系,但我不想在相同的唯一ID下使用相同的哈希值:
1:aeF4t和1:aeF4t.
是否有任何优雅的选项或良好的编程技术来实现PHP中的性能同时保持性能?
您可以尝试像crc32这样的校验和函数.我不确定你是否会遇到冲突(不同阵列的校验和相同),但概率应该非常低.
$array = array(533 => array('a' => 78), 460 => array('a' => 89));
$crc32 = sprintf('%u', crc32(serialize($array)));
echo $crc32; // 547561972
Run Code Online (Sandbox Code Playgroud)
使用基本转换,您可以缩短此整数:
echo base_convert($crc32, 10, 36); // 9205is
Run Code Online (Sandbox Code Playgroud)
如果你转换为基数62,你可以进一步缩短它:
base62 = b3Vsi
Run Code Online (Sandbox Code Playgroud)
对于基地62转换访问:
http://marcus.bointon.com/php-base-62-encoding/.
顺便说一下:使用基本转换,你也可以缩短md5哈希:
md5 (base 16) = de07bf84ad7708b93eca60b608c7b6e2
md5 (base 62) = 6KXPVjy4V22IgMsCKo86IQ
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6486 次 |
| 最近记录: |