Требовать разные символы в коде безопасности - PullRequest
2 голосов
/ 07 января 2012

Пример кода безопасности:

a35sfj9ksdf

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

Ответы [ 3 ]

1 голос
/ 07 января 2012

Возможность, которая не была описана ни здесь, ни на Как хранить и проверять цифры, выбранные случайным образом из PIN / пароля , такова:

  • Создать случайную соль той же длины, что и код безопасности (здесь 11)
  • Храните соль с пользователем
  • для каждого символа кода безопасности, замените соответствующий символ соли с символом из кода безопасности и надежно хэшируйте его
  • сохранить эти хэши у пользователя

Теперь вы должны хранить управляемое количество n + 1 полей для кода безопасности длины n и все еще можете проверять одиночные (position, char) кортежи

0 голосов
/ 07 января 2012

вы можете выполнить эти шаги,

  1. сохранить все нужные символы в массиве

  2. сгенерировать n (длина кода пользователя) числослучайных чисел, где каждое число будет представлять символ вашего массива.

  3. Затем объединить новые сгенерированные символы, чтобы сделать строку

  4. Сохранитьстрока, использующая сеанс, и при запросе от пользователя просто сопоставьте код пользователя с сеансом

, вы также можете сделать простой сервис капчи, используя аналогичный способ

0 голосов
/ 07 января 2012

А как насчет использования substr ()?

substr("a35sfj9ksdf", 0, 1);

Это вернул бы 'a', первый символ

substr("a35sfj9ksdf", 4, 1);

Это вернет 4, 5-й символ

Так что-то вроде, пожалуйста, введите символ $ n и используйте

substr("a35sfj9ksdf", $n-1, 1);
...