Рейтинг:3

Зашифровать/зашифровать и расшифровать/расшифровать строку с секретом

флаг cn

При разработке приложения у меня есть простой вариант использования, когда я хочу зашифровать/зашифровать строку (это также может быть пара байтов, потому что по сути это просто IP-адрес). На выходе, я думаю, было бы лучше иметь шестнадцатеричную строку (думая о старых md5-хэшах). Никто, у кого нет закрытого ключа, не сможет расшифровать/расшифровать IP-адрес.

Процесс выглядит следующим образом: у меня есть строка (IP-адрес из VPN-сети) и я шифрую ее с помощью закрытого ключа (должен быть только один закрытый ключ, без открытого ключа или чего-то еще). Пользователь получает зашифрованную строку, входит в мое приложение и отправляет ее мне, чтобы я мог связать пользователя с IP-адресом. IP-адреса должны оставаться частными и принадлежать только мне.

Кто-нибудь из вас, знакомых с криптографией, знает, как выполнить такое шифрование/шифрование или какой метод здесь работает? Я готов приложить некоторые усилия, чтобы прочитать о том, как выполнить эту задачу, но я был бы признателен, если бы кто-то мог немного помочь мне своими знаниями, в каком направлении мне нужно идти в этой запутанной области.

С уважением

Maarten Bodewes avatar
флаг in
Похоже, вы просто хотите использовать симметричный шифр, возможно, используя режим аутентификации, такой как AES-GCM. Кстати, кажется, что вы хотите, чтобы ваш ключ присутствовал во время шифрования и дешифрования: мы обычно называем **секретным** ключом, а не **закрытым** ключом, потому что вы ожидаете, что закрытый ключ будет находиться только в одном месте. .
Maarten Bodewes avatar
флаг in
Обратите внимание, что выходные данные современных шифров состоят из двоичных данных, обычно байтов. Эти байты могут быть представлены или закодированы в виде текста с использованием, например, шестнадцатеричных чисел или base64url. Однако кодирование/декодирование не считается частью криптографических алгоритмов (хотя, конечно, оно может быть частью протокола, использующего криптографию). Например, вывод устаревшего алгоритма MD5 составляет 128 бит / 16 байт, но вывод инструмента командной строки `md5sum` состоит из шестнадцатеричных чисел и указания файла.
poncho avatar
флаг my
Пользователь вручную вводит строку? Если это так, важно, чтобы оно было кратким. С другой стороны, если IP-адрес, о котором мы говорим, является адресом IPv6, это уже 128 бит, поэтому сделать строку «короткой» может быть невозможно при таком подходе — альтернативным подходом может быть подход «tinyURL» — пусть сервер хранит базу данных «тегов» и «IP-адресов» и выдает теги пользователю.
fonzane avatar
флаг cn
Пользователь не вводит строку вручную. Я кодирую его в QR-коде. Мое решение прямо сейчас состоит в том, чтобы использовать встроенные в nodejs криптомодули createCipheriv с алгоритмом aes256. Мое единственное сомнение в этом подходе сейчас заключается в том, что выходная строка настолько длинная, что я, возможно, не захочу помещать ее в URL...
Maarten Bodewes avatar
флаг in
К сожалению, хороший ответ будет включать в себя полный анализ вашей ситуации. Однако я могу сказать, что createCipheriv просто использует CBC, который не так эффективен из-за заполнения. Кроме того, вы должны посмотреть, как закодировать открытый текст в минимальном количестве байтов. Например. адрес IPv4 может занимать всего 4 байта (и даже меньше, если он всегда находится в локальной сети 10.x.x.x, конечно, так как вы можете пропустить 10).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.