однозначный обратимый алгоритм шифрования [закрыто]

Я видел похожий вопрос, но не нашел хорошего ответа. Я пытаюсь найти алгоритм шифрования, который является взаимно однозначным и обратимым, который использует ключ, а также x must-go y каждый раз

      psuedo 
a = "secret"
b = func(a,key)
//b value is like 234jkeopıxsdfgo93423+%+^%/&
c =func(b,key)
//and c value also shold be 234jkeopıxsdfgo93423+%+^%/&

1 ответ

Вам нужен «симметричный» (обратимый), «детерминированный» (x должен переходить в y каждый раз), «шифровальный» (один к одному) алгоритм. Этот ответ актуален.

Так, например, AES SIV.

Однако вы должны точно указать, почему вы считаете, что вам это нужно, и каков ваш сценарий использования; вы вполне могли столкнуться с проблемой XY.

другая возможность

Вы можете сгенерировать числовой код (скажем, от 1 до 9999) для каждого пользователя, а затем добавить к нему любой надежный хэш секрета и кода:

      code = "0001"
sign = "thisismysecret.0001"
hash = "fdbbc3bb9faaf514225d74e5e691aa3b"
pass = "fdbbc3bb9faaf514225d74e5e691aa3b:0001"

Проверка:

      (hash,code) = pass.split(":")
if (hash == crypto.md5((secret,code).join('.')) {
    -- the password is good
}

У вас есть проблема с использованием AES-SIV или любого другого алгоритма, включая односторонний хэш выше, преобразования прохода во что-то короткое и легко запоминающееся. Обычно вы могли бы .substr хеш и получить только его первые N символов. Чтобы преобразовать его во что-то запоминающееся, если у вас есть шестнадцатеричные цифры, вы можете взять их по X за раз (X=3 дает вам 16^3 = 4096 возможностей) и использовать их как смещения в словаре простых слов:

      0xdeadbeef = 0x0deadbeef = 0x0de 0xadb 0xeef = "Horse" "Battery" "Staple"
Другие вопросы по тегам