Як розшифрувати qr код?

Фото - Як розшифрувати QR код?

Сьогодні дуже часто для маркування різної інформації використовується QR код. Він являє собою двомірний штрих-код, що складається з чорних і білих квадратів. Кожен квадрат є 1 (або 0) бітом інформації. Такий код легко розшифрувати за допомогою смартфона зі спеціальним додатком. Проте в деяких випадках прочитати QR код можна і вручну.

В першу чергу, для того щоб приступати до штурму коду, необхідно розібратися, яким саме чином відбувається шифрування. Існують декілька типів кодування даних:

  • числовий (цифри 0-9);
  • альфачісловой (цифри 0-9, літери AZ, спецсимволи: пробіл, $% * + - / :);
  • бітовий;
  • Кандзі (файли упаковуються в 13 біт);



Як розшифрувати QR код?

Вся інформація в коді розбивається на блоки. Їх можна умовно розділити на 4 типи:

  1. область детектування, тобто перетворюють модуль (розташовані по кутах коду великі виразні квадрати, всередині яких знаходиться ще один чорний квадрат). Ця область не несе корисної інформації з точки зору розшифровки даних;
  2. системна інформація. Вона являє собою дві смуги даних, які дублюються по 2 рази (разом 4 смуги, розташованих збоку, праворуч і знизу від блоків детектування);
  3. інформація про версію коду. Від версії коду залежить максимальна кількість даних, яке можна зашифрувати. Чим вище версія, тим складніше дані розшифрувати вручну. Іноді це просто не доцільно. З підвищенням версією, кількість блоків у коді буде більше. Тобто між перетворювати модулями по краях простір буде заповнено щільніше;
  4. безпосередньо дані.

Крок 1.

Інтерес, з точки зору розшифровки інформації, представляє тільки один рядок системного коду. Вона знаходиться відразу під лівим верхнім перетворювати модулем. Тут знаходиться 5 біт інформації.

Тепер потрібно згадати двійкову систему числення і записати дані в цьому рядку. Отже, дивимося на рядок (рядок закінчується під лівим верхнім перетворювати модулем) і записуємо 0 на порожньому місці і 1 на заповненому. Нас цікавлять тільки перші 5 біт інформації. Таким чином, отримуємо рядок з 5 цифр (наприклад 10111).

Крок 2.

Тепер застосовуємо маску до системної інформації. Маска - це додатковий спосіб захисту інформації. Вона має вигляд: 101010000010010. Оскільки ми працюємо тільки з 5 бітами інформації, то і маску скорочуємо відповідно. Залишаємо перші 5 цифр і отримуємо 10101. Тепер до наших 5 бітам застосовуємо маску за допомогою операції виключає або (XOR).

Наприклад: 10111 XOR 10101 = 00010

Отриману рядок з даними варто розділити на 2 частини. Перші 2 цифри - це рівень корекції помилок. У таблиці нижче можна ознайомитись з їх типами.

L01
M00
Q11
H10

Решта 3 цифри визначають тип маски. Можливі маски наведені нижче:

Номер маскиЯкщо формула вірна для наведених нижче рядка / розділу, перемикається на новий біт
000(I + j) mod 2 = 0
001i mod 2 = 0
010j mod 3 = 0
011(I + j) mod 3 = 0
100((I div 2) + (j div 3)) mod 2 = 0
101((I j) mod 2 + (i j) mod 3) mod 2 = 0
110((I j) mod 2 + (i j) mod 3) mod 2 = 0

де i - рядок, j-розділ.

Крок 3.

Фото - QR код

Переходимо до заголовка даних в коді. Тема знаходиться в правому нижньому кутку. Подумки виділяємо прямокутник 2-12, який розташовується скраю праворуч і спрямований вгору. Запам'ятаємо його розташування, він нам знадобиться при безпосередньому читанні даних.

Тепер визначаємо режим даних. Для цього знову використовуємо двійкову систему. Опускаємося до основи нашого уявного прямокутника і записуємо 0 в білих і 1 в чорних клітинах, рухаючись змійкою знизу вгору, справа наліво. Для заголовка нам досить обробити область 4-4. Отримуємо рядок з 4 цифр.


Наприклад: 0100

Список можливих режимів наведено нижче:

ECI0111
Числові0001
Буквено-числові0010
8-бітний (байтний)0100
Кандзі1000
Структуроване доповнення0011
FNC1

0101 (1-а позиція)

1001 (2-я позиція)

Отже, дана в прикладі рядок з цифрами відповідає даним з 8 бітів. Незалежно від отриманого типу даних, до них потрібно знову застосувати маску. Маска в даному випадку буде для кожного типу своя. Наприклад, для 8-бітного типу даних вона буде 0000, для чисельного - 0110. Обчислювати маску можна за наведеними вище формулами.

Знову застосовуємо до обчислених даними маску за допомогою оператора XOR.

Наприклад 0100 XOR 0000 = 0100

Крок 4.

Приступаємо до читання даних. Дані записані в нашій прямокутної області 2-12, починаючи з 3-го рядка (перші 2 строкі- заголовок даних). Рядки ми читаємо знизу вгору. Отже, переводимо в двійковий код всю решту область прямокутника. Рухаємося змійкою справа наліво. Отримуємо ряд з 20 цифр. Застосовуємо маску за допомогою оператора XOR. Для 8-бітного типу даних повна маска буде 0000 0000 0000 0000 0000, для чісленного- 0001 1000 0110 0001 1000. (Обчислюємо маску за наведеними вище формулами).

Тепер визначаємо режим читання даних за таблицею, наведеною нижче:

Числові10 біт / 4 біта
Буквено-числові9 біт
8-бітний (байтний)8 біт

Це означає, що для 8-бітного типу даних ми відокремимо перші 8 цифр, а для числового, наприклад, 10. Одержаний ряд цифр переводимо в десяткову систему. Вийшло число - кількість пакетів даних. Якщо отримуємо 1 - це означає, що зашифрований 1 символ. Розшифрувати його можна, перевівши із двійкової системи наступні 4 цифри в залишився ряду.

Якщо отримане число пакетів більше, ніж 1, то приступаємо до подальшої розшифровки. Для цього переходимо до читання наступного стовпчика. Подумки виділяємо область 2-12 зліва від першого виділеного прямокутника. Переводимо його в двійковий код, використовуючи той же принцип «змійки». До що вийшло ряду чисел застосовуємо маску, обчислену за допомогою наведених вище формул, за допомогою оператора XOR. Далі для розшифровки ряду чисел ділимо його на групу з 8, 9 або 10 цифр (ряд читати справа наліво), залежно від режиму читання (таблиця представлена вище). Переводимо кожну групу з двійкової системи. Для чисельних значень використовуємо переклад в десяткову систему. Для переклад 8-бітних даний використовуємо таблицю кодування ASCII.


» » Як розшифрувати qr код?