在PHP中创建自己的哈希?

时间:2009-12-16 08:52:40

标签: php hash

好吧,我需要使用唯一的文件名保存图像,并将文件名存储在数据库中。我曾经做过MD5哈希并用hash获得的值的文件名保存图像。

但是我想将不必要的空间使用量从32个字符减少到10-12个字符。

我不想将获得的md5哈希子行()设为12个字符。

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

6 个答案:

答案 0 :(得分:2)

使用以下函数Tempnam

怎么样?

http://php.net/manual/en/function.tempnam.php

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

答案 1 :(得分:1)

也许使用CRC32而不是MD5?它是8个字符,而不是32个字符,但它更接近你的目标。

答案 2 :(得分:1)

PHP's Hash message digest framework提供了大量的哈希算法。玩得开心!

确定每个哈希的长度see Wikipedia

答案 3 :(得分:1)

CRC32长度为8个ASCII字符。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

我做了这个简单的哈希函数,以使用自定义字符和大小创建自己的哈希

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;
}

使用方法:

<?=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