= Сообщение: 300 из 2735 ==================================== RU.FTN.DEVELOP = От : Mithgol the Webmaster 2:5063/88 15 Feb 14 11:34:20 Кому : All 15 Feb 14 11:34:20 Тема : Употребление хэша CRC-32 в базах JAM (в файлах .JLR и .JHR и .JDX) FGHI : area://RU.FTN.DEVELOP?msgid=2:5063/88+52ff217b На : area://RU.FTN.DEVELOP?msgid=2:5063/88+529c2567 = Кодировка сообщения определена как: CP866 ================================== ==============================================================================
К своему величайшему сожалению, за два с половиною месяца так и не удалось мне получить в Фидонете ответ на отправленное 2 декабря прошлого (2013) года сообщение ── и пришлось самому искать и найти разгадку изложенной там загадки:
MtW> У меня GoldED+ (на самом деле GoldED-NSF, но это не важно: эта часть MtW> алгоритма в нём скорее всего не изменялась) создаёт .JLR-файлы, MtW> в которых первые четыре байта в шестнадцатеричной системе счисления MtW> имеют вид 7C 34 12 5B, и следующие четыре байта также имеют вид MtW> 7C 34 12 5B.
MtW> По стандарту JAM первые четыре байта должны быть хэшем CRC-32 от имени MtW> пользователя, взятого в нижнем регистре (что означает, что буквы 'A-Z' MtW> в имени становятся буквами 'a-z', но больше никаких изменений), MtW> а вторые четыре байта должны содержать уникальный идентификатор MtW> пользователя.
MtW> Я так понимаю, что создатели GoldED+ решили, что CRC-32 ── достаточно MtW> уникален для идентификатора, и этим объясняется подобие второй четвёрки MtW> байтов и первой.
MtW> А вот почему именно 7С 34 12 5B ── то есть число 0x5b12347c (в записи MtW> языка Си или JavaScript) ── этого я никак не могу себе объяснить.
MtW> В конфигурации GoldED-NSF первое значение UserName стоит Mithgol MtW> the Webmaster, однако CRC-32 от строки 'mithgol the webmaster' будет MtW> 0xa4edcb83.
MtW> В конфигурации GoldED-NSF параметру RegisterName задано значение SysOp, MtW> однако CRC-32 от строки 'sysop' будет 0x8ab05249.
MtW> Если от строки 'mithgol' брать CRC-32, то выходит 0x41cfb294.
MtW> Откуда тогда 0x5b12347c берётся-то?
MtW> В качестве постскриптума прибавлю, что в файле http://j.mp/1dKs6Jf MtW> строка 70 использует WideUsername[0] ── а это что же, не первое MtW> значение UserName разве?
После ряда экспериментов удалось установить, что GoldED-NSF (а также, весьма вероятно, и все остальные программы, работающие с JAM-базами в Фидонете) кладут в JAM-базу (не только в .JLR, но и в .JHR, и в .JDX) не сам хэш CRC-32, а итог его побитового отрицания (или, что то же самое, итог вычитания из наибольшего тридцатидвухбитного числа, двоичная запись которого состоит из 32 единиц).
Скажем, хэш CRC-32 от пустой строки равняется нулю, тогда как в поле REPLYcrc в структуре MessageFixedHeader внутри JHR-файла при отсутствующем кладже REPLY будет стоять не ноль, а число 4294967295 (оно получается, если вычесть единицу из итога возведения двойки в тридцать вторую степень), то есть наибольшее из тридцатидвухбитных чисел.
Соответственно, хотя хэш от строки 'mithgol the webmaster' будет 0xa4edcb83, в JLR-файле стоит число 0x5b12347c ── сумма их составляет опять же 4294967295.
Этим объясняется то вышеизложенное обстоятельство, которое я никак не мог себе ранее объяснить и дошёл даже до того, что плюнул на обработку имён в JLR-файле.
Теперь я наконец могу двигаться дальше; например, могу теперь запрограммировать быстрый поиск сообщения по его MSGID, используя CRC-32 из заголовка, что будет способствовать быстрой обработке URLов FGHI, содержащих параметр 'msgid=...'.
Жаль только, что за прошедшие два с половиной месяца мне не удалось на этот вопрос получить ответ от фидонетовского сообщества, хотя, казалось бы, вопрос был опубликован в Ru.FTN.Develop и Ru.GoldED и SU.FidoTech, то есть в трёх эхоконференциях, наиболее ему релевантных, наиболее соответствующих ему. Чем объяснить такое ── оскудением ли общественного знания о стандартах хранения фидопочты, личным ли неприязненным ко мне отношением, которое заставило знающих воздержаться от ответа ── я ещё не решил.
* изначально написано в эхоконференцию Ru.FTN.Develop * также было отослано в эхоконференцию Ru.GoldED * также было отослано в эхоконференцию SU.FidoTech * также было отослано в эхоконференцию Ru.Fidonet.Today
Фидонет будет великим и гипертекстовым! [Ru.Mozilla] http://Mithgol.Ru/ Mithgol the Webmaster. [Братство Нод] [Team А я меняю subj]
... Чужая душа потёмки. Особенно, когда её нет. (пословица аpанков) --- Эшелону: монархические NMIC NIOG IDB MID/KL NADIS NMI SEIDM BNC CNCIS * Origin: ── А остальное?... ── А остальное карбиды вольфрама!!.. (2:5063/88) |