
Быстрый поиск
Введите фрагмент названия статьи для поиска
Кодирование и декодирование чисел по алгоритму Base58
22.01.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter
Base58 - вариант кодирования чисел в виде буквенно-цифрового текста на основе цифр и символов латинского алфавита. Алфавит Base58, как можно догадаться из названия, содержит 58 символов. Base58 был разработан для передачи данных и уменьшения количества ошибок у пользователей, которые вручную вводят данные на основе распечатанного текста или фотографии, то есть без возможности машинного копирования и вставки. Так, к примеру, Base58 используется для кодирования идентификаторов кошельков Bitcoin, для создания коротких ссылок на фотохостингах и т.п. В отличие от кодирования Base64, позволяющего работать с неограниченными объемами двоичных данных, Base58 предназначен для кодирования только одиночных числовых значений.Согласно спецификации, в алфавит Base58 не входят буквенно-цифровые символы, которые имеют сходное написание и могут неоднозначно восприниматься человеком (например, буква "О" и цифра "0"), а также символы, используемые при формировании URL. Вместе с тем, порядок следования символов в алфавите ничем не регламентирован, зависит только от сферы применения кодирования и может быть любым. Для этой статьи я выбрал следующий алфавит Base58:
Code (Assembler) : Убрать нумерацию
- alpha db '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'
- alpha_len=$-alpha
Читать статью целиком »
Просмотров: 4457 | Комментариев: 4
Алгоритмы шифрования TEA и XTEA на Ассемблере
13.12.2018 | Категория: Образ мышления: Assembler | Автор: ManHunter

Алгоритмы шифрования TEA и XTEA на Ассемблере
Tiny Encryption Algorithm (TEA) - один из видов блочных алгоритмов шифрования данных. Главными отличиями TEA являются высокая скорость работы, нетребовательность к памяти и простота реализации на различных языках программирования. Не обошлось и без недостатков в виде уязвимости к некоторым типам криптографических атак, но даже несмотря на это алгоритм завоевал широкую популярность в различных системах.
Читать статью целиком »
Просмотров: 3530 | Комментариев: 8
Как удалить BOM из файлов
24.12.2017 | Категория: Web-мастеру и не только | Автор: ManHunter
Маркер последовательности байтов, он же BOM - специальный символ Юникода, который вставляется в начало текстового файла для обозначения того, что в этом файле используется Юникод. Согласно спецификации, использование этого символа не является обязательным, однако оно широко распространено, что иногда приводит к проблемам при обработке данных.Так, к примеру, однажды я столкнулся с ситуацией, когда от сторонней системы передавался файл в формате JSON, а я у себя должен был извлечь поступившие данные при помощи стандартной функции PHP json_decode. Файл передается и принимается успешно, на первый взгляд имеет абсолютно корректную структуру, правильно открывается в браузере и блокноте, но функция декодирования все равно возвращает ошибку, что данные некорректные. Сейчас я не смогу сказать, сколько времени потратил на выяснение причины ошибки, пока, наконец, не решил открыть файл при помощи HEX-редактора. Оказалось, что всему виной был маркер BOM, из-за которого функция json_decode не могла корректно раскодировать файл.
Для решения проблемы я быстренько нарисовал вот такую функцию в несколько строчек:
Code (PHP) : Убрать нумерацию
- // Функция удаления BOM из потока данных
- function remove_BOM($data) {
- // Маркер UTF-8
- if (substr($data,0,3)=="\xEF\xBB\xBF") {
- return substr($data,3);
- }
- // Маркер UTF-16
- elseif (substr($data,0,2)=="\xFF\xFE") {
- return substr($data,2);
- }
- else {
- return $data;
- }
- }
Просмотров: 3389 | Комментариев: 1
Расстояние между двумя точками на карте
27.08.2017 | Категория: Web-мастеру и не только | Автор: ManHunter

Расстояние между двумя точками на карте
Одна из задач, с которой могут столкнуться разработчики - вычисление расстояния между двумя точками на карте. Это может быть определение объектов, которые находятся вблизи какой-то конкретной точки, оценка времени перемещения из одной точки в другую, вариантов применения может быть много.
Читать статью целиком »
Просмотров: 4357 | Комментариев: 2
Выборка родительских элементов в древовидном массиве
18.08.2017 | Категория: Web-мастеру и не только | Автор: ManHunter
Создавать многомерный массив из одномерного массива с указателями на родительские элементы мы уже умеем. Но может возникнуть другая задача: зная ID элемента, надо получить все его родительские элементы, причем уровень вложенности может быть абсолютно любым. Пример из практики. В базе хранится список стран и регионов, перелинкованный через указатели на родительские элементы. Если его развернуть в многомерный массив, то получится примерно следующее:Code (PHP) : Убрать нумерацию
- $regions=array(
- 1=>array(
- 'name'=>'Россия',
- 'parent'=>0,
- 'child'=>array(
- 2=>array(
- 'name'=>'Москва и Московская область',
- 'parent'=>1,
- 'child'=>array(
- 3=>array(
- 'name'=>'Москва',
- 'parent'=>2,
- 'child'=>array(
- ),
- ),
- 5=>array(
- 'name'=>'Московская область',
- 'parent'=>2,
- 'child'=>array(
- 6=>array(
- 'name'=>'Дмитровский район',
- 'parent'=>6,
- 'child'=>array(
- 7=>array(
- 'name'=>'Дмитров',
- 'parent'=>6,
- 'child'=>array(),
- ),
- 9=>array(
- 'name'=>'Яхрома',
- 'parent'=>6,
- 'child'=>array(),
- ),
- ),
- ),
- ),
- ),
- ),
- ),
- 4=>array(
- 'name'=>'Пермский край',
- 'parent'=>1,
- 'child'=>array(
- 8=>array(
- 'name'=>'Пермь',
- 'parent'=>4,
- 'child'=>array(),
- ),
- 10=>array(
- 'name'=>'Соликамск',
- 'parent'=>4,
- 'child'=>array(),
- ),
- 11=>array(
- 'name'=>'Кунгур',
- 'parent'=>4,
- 'child'=>array(),
- ),
- ),
- ),
- ),
- ),
- );
Читать статью целиком »
Просмотров: 2343 | Комментариев: 2


