Предполагая, что единственными пунктами, которые следует зашифровать, являются токены (то есть они не встроены в более крупную структуру данных), а затем - векторы inicialization (IV).
Они достаточно просты в понимании: пусть M - ваш токен, дополненный размером блока, используемым в алгоритме симметричного шифрования (я предполагаю, что это AES), и IV - случайный массив бит, а также размер блок шифрования.
Затем вычислить C = AES_ENCRYPT (M xor IV, K), где C - зашифрованные данные, а K - симметричный ключ. Таким образом, одно и то же сообщение M не будет зашифровываться одинаково много раз, поскольку IV случайным образом получается каждый раз.
Чтобы расшифровать M, просто вычислите M = (AES_DECRYPT (C, K) xor IV).
Конечно, как IV, так и K должны быть известны во время дешифрования. Самый обычный способ передачи IV - просто отправить его по зашифрованному тексту. Это не ставит под угрозу безопасность, это в значительной степени напоминает сохранение значения соли, поскольку ключ шифрования останется неизвестным для всех остальных.
Обратите внимание, что вам может потребоваться заполнить имена пользователей до определенного размера, если только они не содержат утечки информации о размере имени. –
@ntoskmi Очень плотный ответ. Не могли бы вы указать на ресурс, который мог бы подробнее рассказать о том, что такое ЕЦБ и как известно IV во время дешифрования? – yannisf
@yannisf В Википедии есть статья о [режимах работы] (https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation). Обратите внимание, в частности, на набор изображений, изображающих пингвина. Вы можете просто отправить IV вместе с зашифрованным текстом; его не нужно хранить в секрете. – ntoskrnl