Создать свой собственный хэш в PHP? - PullRequest
0 голосов
/ 16 декабря 2009

Ну, мне нужно сохранить изображения с уникальными именами файлов и сохранить имена файлов в базе данных. Раньше я делал хеш MD5 и сохранял изображение с именем файла значения, полученного хешем.

Однако я хотел бы сократить ненужное использование пространства с 32 до 10-12 символов.

Я не хочу подстраивать () полученный хэш md5 до 12 символов.

Вместо этого есть ли способ создать пользовательский хэш из 10-12 символов?

Ответы [ 6 ]

2 голосов
/ 16 декабря 2009

Как насчет использования следующей функции Tempnam

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

"Создает файл с уникальным именем файла с разрешением доступа, равным 0600, в указанном каталоге. Если каталог не существует, tempnam() может создать файл во временном каталоге системы и вернуть имя этого файла. . "

1 голос
/ 16 декабря 2009

Вы можете представить 128-битные значения хэша MD5 всего 16 символами (8 бит на символ вместо 4).

1 голос
/ 16 декабря 2009

CRC32 имеет длину 8 символов ASCII.

1 голос
/ 16 декабря 2009

Фреймворк хеш-сообщений PHP предоставляет множество алгоритмов хэширования. Веселись!

Чтобы определить длину каждого хеша, см. Википедию .

1 голос
/ 16 декабря 2009

Может быть, использовать CRC32 вместо MD5? Это 8 символов, а не 32, но это ближе к вашей цели.

0 голосов
/ 30 января 2019

Я сделал эту простую хэш-функцию, чтобы создать свой собственный хэш с пользовательскими символами и размером

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...