在PHP中创建自己的哈希?

在PHP中创建自己的哈希?,php,hash,Php,Hash,嗯,我需要用唯一的文件名保存图像,并将文件名存储在数据库中。我曾经做过MD5散列,用散列得到的值的文件名保存图像 但是,我希望将不必要的空间使用从32个字符减少到10-12个字符 我不想将获得的md5哈希值替换为12个字符 有没有办法创建10-12个字符的自定义哈希?可能使用CRC32而不是MD5?它是8个字符,不是32个字符,但更接近您的目标。提供了大量哈希算法。玩得开心 要确定每个散列的长度,.是8个ASCII字符长。您可以用16个字符(每个字符8位,而不是4个字符)表示128位MD5散列值

嗯,我需要用唯一的文件名保存图像,并将文件名存储在数据库中。我曾经做过MD5散列,用散列得到的值的文件名保存图像

但是,我希望将不必要的空间使用从32个字符减少到10-12个字符

我不想将获得的md5哈希值替换为12个字符


有没有办法创建10-12个字符的自定义哈希?

可能使用CRC32而不是MD5?它是8个字符,不是32个字符,但更接近您的目标。

提供了大量哈希算法。玩得开心


要确定每个散列的长度,.

是8个ASCII字符长。

您可以用16个字符(每个字符8位,而不是4个字符)表示128位MD5散列值。

使用以下函数Tempnam怎么样


“在指定目录中创建一个具有唯一文件名且访问权限设置为0600的文件。如果该目录不存在,
tempnam()
可能会在系统的临时目录中生成一个文件,并返回该文件的名称。”

我使用此简单的哈希函数创建自己的具有自定义字符和大小的哈希。”

function simple_hash($str, $size=5, $characters='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
    $hash_array = array();
    $hash = '';
    for($i=0;$i<$size;$i++){
        $hash_array[$i]=0;
    }
    for($s=0;$s<strlen($str);$s++){
        for($i=0;$i<$size;$i++){
            $hash_array[$i]=($hash_array[$i]+ord($str[$s])+$i+$s+$size)%strlen($characters);
        }
    }
    for($i=0;$i<$size;$i++){
        $hash .= $characters[$hash_array[$i]];
    }
    return $hash;
}
function simple_hash($str,$size=5,$characters='0123456789abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz'){
$hash_array=array();
$hash='';
对于($i=0;$i//cgkcgkc)
//eDcBaeDcBa
//BGLQV
//CHMRW
//gsEQ2
//0gwM2
//5lBR7

您可以用16个字符表示128位MD5哈希值。请注意,您仍然需要检查是否存在重复项。是的,总共是26^8。我想这是不够的,但我不希望它们冲突这就是我寻找10-12个字符的原因示例:1字节=1个字符。128位=16字节。=>128位=16个字符。
MD5(“字符串”,true)
提供16个字符。注意!字符串还将包含\0之类的内容。在mysql数据库(utf-8排序规则)中插入相同的值安全吗?还是需要执行筛选器?@atif089:最好使用二进制ASCII作为字符≥ 128在UTF-8中使用多个字节。另请参见echo md5('1_DSC00144_'.time(),true);返回我“ƒ|^××|uèõòþ”,我需要使用ASCII字符串保存在数据库中,以便在URL中使用它。bin2hex正在将其重新设置为32个字符。是的,这是交易,当您仅使用ASCII的高位64位;-)我实际上不想创建文件,我想将一个具有唯一名称的上载文件移动到一个目录。考虑到此功能,我必须创建一个tmp文件,读取上载文件,覆盖tmp文件。您不认为将文件从一个位置移动到另一个位置会更慢吗?取决于文件的大小根据文件和上传的规律性,额外的开销应该是最小的crc32是一个校验和-不是真正的哈希。几乎每50K crc32(),你就会得到一个副本。
<?=simple_hash('test')?>  // EIMQU
<?=simple_hash('test')?>  // EIMQU
<?=simple_hash('test',10)?> // Y26aeimquy
<?=simple_hash('test',10)?> // Y26aeimquy
<?=simple_hash('test',10,'abcdefghijkl')?> // cgkcgkcgkc
<?=simple_hash('test',10,'abcdeABCDE')?> // eDcBaeDcBa

<?=simple_hash('test2')?>  // BGLQV 
<?=simple_hash('test3')?>  // CHMRW
<?=simple_hash('a big string')?> // gsEQ2
<?=simple_hash('Ελληνικά')?> // 0gwM2
<?=simple_hash('Ελληνικα')?> // 5lBR7