Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Кодирование и декодирование чисел по алгоритму Base58

22.01.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter
Base58 - вариант кодирования чисел в виде буквенно-цифрового текста на основе цифр и символов латинского алфавита. Алфавит Base58, как можно догадаться из названия, содержит 58 символов. Base58 был разработан для передачи данных и уменьшения количества ошибок у пользователей, которые вручную вводят данные на основе распечатанного текста или фотографии, то есть без возможности машинного копирования и вставки. Так, к примеру, Base58 используется для кодирования идентификаторов кошельков Bitcoin, для создания коротких ссылок на фотохостингах и т.п. В отличие от кодирования Base64, позволяющего работать с неограниченными объемами двоичных данных, Base58 предназначен для кодирования только одиночных числовых значений.

Согласно спецификации, в алфавит Base58 не входят буквенно-цифровые символы, которые имеют сходное написание и могут неоднозначно восприниматься человеком (например, буква "О" и цифра "0"), а также символы, используемые при формировании URL. Вместе с тем, порядок следования символов в алфавите ничем не регламентирован, зависит только от сферы применения кодирования и может быть любым. Для этой статьи я выбрал следующий алфавит Base58:
  1. alpha db '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'
  2. alpha_len=$-alpha
Использования своего собственного порядка символов также позволяет добавить немного секурности вашему проекту, затрудняя перебор последовательных идентификаторов. Но вы должны понимать, что целиком надеяться на это ни в коем случае не стоит.

Читать статью целиком »
Просмотров: 1422 | Комментариев: 6

Алгоритмы шифрования TEA и XTEA на Ассемблере

13.12.2018 | Категория: Образ мышления: Assembler | Автор: ManHunter

Алгоритмы шифрования TEA и XTEA на Ассемблере

Tiny Encryption Algorithm (TEA) - один из видов блочных алгоритмов шифрования данных. Главными отличиями TEA являются высокая скорость работы, нетребовательность к памяти и простота реализации на различных языках программирования. Не обошлось и без недостатков в виде уязвимости к некоторым типам криптографических атак, но даже несмотря на это алгоритм завоевал широкую популярность в различных системах.

Читать статью целиком »
Просмотров: 1625 | Комментариев: 8

Как удалить BOM из файлов

24.12.2017 | Категория: Web-мастеру и не только | Автор: ManHunter
Маркер последовательности байтов, он же BOM - специальный символ Юникода, который вставляется в начало текстового файла для обозначения того, что в этом файле используется Юникод. Согласно спецификации, использование этого символа не является обязательным, однако оно широко распространено, что иногда приводит к проблемам при обработке данных.

Так, к примеру, однажды я столкнулся с ситуацией, когда от сторонней системы передавался файл в формате JSON, а я у себя должен был извлечь поступившие данные при помощи стандартной функции PHP json_decode. Файл передается и принимается успешно, на первый взгляд имеет абсолютно корректную структуру, правильно открывается в браузере и блокноте, но функция декодирования все равно возвращает ошибку, что данные некорректные. Сейчас я не смогу сказать, сколько времени потратил на выяснение причины ошибки, пока, наконец, не решил открыть файл при помощи HEX-редактора. Оказалось, что всему виной был маркер BOM, из-за которого функция json_decode не могла корректно раскодировать файл.

Для решения проблемы я быстренько нарисовал вот такую функцию в несколько строчек:
  1. // Функция удаления BOM из потока данных
  2. function remove_BOM($data) {
  3.     // Маркер UTF-8
  4.     if (substr($data,0,3)=="\xEF\xBB\xBF") {
  5.         return substr($data,3);
  6.     }
  7.     // Маркер UTF-16
  8.     elseif (substr($data,0,2)=="\xFF\xFE") {
  9.         return substr($data,2);
  10.     }
  11.     else {
  12.         return $data;
  13.     }
  14. }
При получении файла данные сперва обрабатывались при помощи этой функции и только после этого отправлялись на декодирование в json_decode.

Просмотров: 1671 | Комментариев: 1

Расстояние между двумя точками на карте

27.08.2017 | Категория: Web-мастеру и не только | Автор: ManHunter

Расстояние между двумя точками на карте

Одна из задач, с которой могут столкнуться разработчики - вычисление расстояния между двумя точками на карте. Это может быть определение объектов, которые находятся вблизи какой-то конкретной точки, оценка времени перемещения из одной точки в другую, вариантов применения может быть много.

Читать статью целиком »
Просмотров: 1884 | Комментариев: 2

Выборка родительских элементов в древовидном массиве

18.08.2017 | Категория: Web-мастеру и не только | Автор: ManHunter
Создавать многомерный массив из одномерного массива с указателями на родительские элементы мы уже умеем. Но может возникнуть другая задача: зная ID элемента, надо получить все его родительские элементы, причем уровень вложенности может быть абсолютно любым. Пример из практики. В базе хранится список стран и регионов, перелинкованный через указатели на родительские элементы. Если его развернуть в многомерный массив, то получится примерно следующее:
  1. $regions=array(
  2.     1=>array(
  3.         'name'=>'Россия',
  4.         'parent'=>0,
  5.         'child'=>array(
  6.             2=>array(
  7.                 'name'=>'Москва и Московская область',
  8.                 'parent'=>1,
  9.                 'child'=>array(
  10.                     3=>array(
  11.                         'name'=>'Москва',
  12.                         'parent'=>2,
  13.                         'child'=>array(
  14.                         ),
  15.                     ),
  16.                     5=>array(
  17.                         'name'=>'Московская область',
  18.                         'parent'=>2,
  19.                         'child'=>array(
  20.                             6=>array(
  21.                                 'name'=>'Дмитровский район',
  22.                                 'parent'=>6,
  23.                                 'child'=>array(
  24.                                     7=>array(
  25.                                         'name'=>'Дмитров',
  26.                                         'parent'=>6,
  27.                                         'child'=>array(),
  28.                                     ),
  29.                                     9=>array(
  30.                                         'name'=>'Яхрома',
  31.                                         'parent'=>6,
  32.                                         'child'=>array(),
  33.                                     ),
  34.                                 ),
  35.                             ),
  36.                         ),
  37.                     ),
  38.                 ),
  39.             ),
  40.             4=>array(
  41.                 'name'=>'Пермский край',
  42.                 'parent'=>1,
  43.                 'child'=>array(
  44.                     8=>array(
  45.                         'name'=>'Пермь',
  46.                         'parent'=>4,
  47.                         'child'=>array(),
  48.                     ),
  49.                     10=>array(
  50.                         'name'=>'Соликамск',
  51.                         'parent'=>4,
  52.                         'child'=>array(),
  53.                     ),
  54.                     11=>array(
  55.                         'name'=>'Кунгур',
  56.                         'parent'=>4,
  57.                         'child'=>array(),
  58.                     ),
  59.                 ),
  60.             ),
  61.         ),
  62.     ),
  63. );
Есть некие объекты, привязанные к региону по его ID. Как получить список всех вышестоящих регионов для конкретного объекта?

Читать статью целиком »
Просмотров: 1023 | Комментариев: 2

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.11 сек. / MySQL: 3 (0.0443 сек.) / Память: 4.75 Mb
Наверх