Шифрование информации QR

Взываю к знающим людям.

Имеем QR код такого вида:

Шифрование информации QR

Внутри конкретно этого QR информация такого вида:

*BSLG511g

Звездочка - просто маркер для программы.

Есть подозрение, что число на QR и содержимое QR - это одно и то же, но только в зашифрованном виде. Как можно это расшифровать обратно в число?

Число на стикере всегда имеет 11 символов, а значение QR, помимо звездочки, имеет 8 или 9 символов. Стикеры печатаются в готовом виде на заводе, то есть значение и число явно соответствуют друг другу.

Больше постов читайте по тегу «Программирование». А если хотите изучить новую профессию, посмотрите актуальные курсы от проверенных школ с реальными отзывами на сайте Пикабу Курсы.

Лига программистов

2.3K постов12K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

6
Автор поста оценил этот комментарий

Алгоритм довольно странный и позволяет перевод лишь в одну сторону и допускает коллизии:

1. строку без * переводим в двоичный код base64

2. если число бит = 40, тогда отбрасываем последние 6 бит, если число бит = 48, то отбрасываем первые 5 бит и последний байт (8 бит)

3. получившееся число из двоичной системы переводим в десятичную


Так как в алгоритме отбрасываются биты, то обратный перевод невозможен. Либо лишние биты генерируются каким-либо образом из текущих, образуя избыточную информацию или проверочную (контрольную) информацию. Может биты четности - код Хэмминга почти вписывается в структуру, но не совсем.


Ниже код на питоне, который можно ввести в любой браузерный питон эмулятор для просмотра разницы между двоичными числами со стороны строки и со стороны числа:


import base64



input_num = [11222309180, 15849986058, 11634412872, 22306583089, 20412060222, 19412999295, 19195357075, 22116733592, 20935626255, 21278067281]

output = ["pzm2TxX", "7C7mApX", "rV3DUgZ", "BTGTcjEY", "BMCnUj4D", "BIUa3H9B", "BHgh55MS", "BSZCkpgU", "BN/cTg8Z", "BPRFilED"]

for i in range(len(input_num)):

bits = base64.decodebytes((output[i] + "==").encode("ascii"))

out_num_to_bin = f'{input_num[i]:08b}'

print("int to bin " + out_num_to_bin + " " + str(len(out_num_to_bin)))

out_base64_to_bin = "".join(["{:08b}".format(x) for x in bits])

print("str to bin " + out_base64_to_bin + " " + str(len(out_base64_to_bin)))

print("!!!")

Иллюстрация к комментарию
раскрыть ветку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества