beginerx, насколько мне известно, Javascript не умеет работать с файлами вообще (разве что с помощью ActiveX, но в моем случае это лишнее). Данные в файл сохраняет/считывает iMacros, под управлением Javascript.
siv1987, огромнейшее Вам спасибо! Получилось именно то, что мне нужно было: строка из 16 символов.
Chukcha, спасибо за комментарий. Опробовала варианты работы с функцией toString(n). Как оказалось, максимальная разрядность, которую она поддерживает, равна 36. Вот только я забыла о нюансе, что увеличение разрядности системы счисления, например, в 2 раза не дает такого же двойного уменьшения количества позиций итогового числа.
Например, число 99999999 в 10-разрядной системе имеет 8 знаков, а в 36-разрядной оно выглядит так: 1njchr - 6 знаков (экономия всего 2 символа). Полагаю, чтобы уменьшить хэш MD5 с 32 символов до 16 нужна гораздо большая система счисления, для которой символов латинского алфавита (больших и маленьких) и цифр попросту не хватит (нужны математики для точного подсчета).
Вероятно, придется возвращаться к варианту усечения хэша для достижения нужной его длины...
Xel, это уже похоже на внедрение системы индексирования для кэша в текстовых файлах. Это уже третья полезная идея :)
В виде числа - да. В виде строки, как мне нужно, к сожалению, нет...
Chukcha, для Вас фигня, для меня нет :)
Я знакома с Javascript всего наполовину, меньше года назад начала пытаться с ним тесно работать. Но если Вы так написали, я подозреваю, у меня есть возможность изменить ход событий в моей md5()?
Если мне удастся сократить эти хэши хоть в 2 раза, это увеличит эффективность всего проекта более чем на 10%.
Правда, если убрать конвертацию wordtohex(), на выходе окажется число в десятичной системе. Что по длине будет еще больше, чем изначальный результат. Но зато его можно попробовать перевести в более экономную систему счисления прямо в этой функции. Главное, найти алгоритм... Да, и это будет уже не MD5, а производный хэш от него.
Chukcha, в любом случае, благодарю Вас тоже!
Благодарю Вас!
Правда, мне кажется, что найти подобный алгоритм (16 -> 32) окажется труднее, чем функцию md5() с дополнительными параметрами... Хотя Ваш вариант я считаю самым оптимальным в плане сохранения устойчивости к коллизиям и одновременного уменьшения размера хэша (благодаря использованию большего числа символов на одной позиции).
DiAksID, я повторюсь, но, к сожалению, речь идет не о PHP, а о Javacript-функции, в которой нет подобных входных параметров. То есть, регулировать опции вывода у меня нет возможности. Результатом является только строка из 32 символов.
Вот сама функция, которую я использую: http://pastebin.com/20RCT4Wb
Других вариантов ее реализации (на Javascript) с указанными Вами входными параметрами мне найти не удалось.
Замечу, что вопрос об уменьшении длины md5-хэша в Интернете достаточно популярный. Вот только другие ответы, как банальное усечение хэша до нужной длины, до сих пор не встречаются.
Chukcha, цель экономии - увеличение скорости загрузки/сохранения кэша из текстового CSV-файла. Чем больше размер кэша в байтах (в моем случае это 5-6 Мб), тем дольше выполняются с ним операции ввода-вывода. Большую роль в работе скрипта играет даже экономия 0.5 секунды. Вот и возникла идея уменьшить md5-хэши, которые занимают в файле ~70% места.
Хранится в банальном текстовом файле в виде кэша (используется пара iMacros + Javascript).
Glueon, к сожалению, речь идет не о PHP, а о Javascript. Но вмешаться в алгоритм работы функции у меня просто не хватает знаний. Также хранить хэш у меня есть возможность только в виде строки: 1 символ = 1 байт (даже если результатом окажется число).