Сравните двустороннюю запись с данными в базе данных - PullRequest
1 голос
/ 18 марта 2011

У меня есть столбец с именем id_num в базе данных, и столбец должен иметь уникальное истинное значение.

Пользователи должны ввести свой идентификатор Num, чтобы зарегистрироваться в моей системе.Чтобы защитить ID Num, я записываю его с помощью $ this-> encript-> encode ()

Зашифрованные данные будут генерировать разные коды каждый раз, когда я вводю одни и те же данные.

Пример:
Первая регистрация: я ввел 12345, будет записан на PVfuF8GDzE4yton9tNabJwG

Вторая регистрация: я ввел тот же номер 12345, будет записан на другой код M0wYZsDAdR1u0WlsDAdR1

Итак, я вызываю checkExistIпроверьте, существует ли уже ID Num или нет, чтобы убедиться, что столбец id_num уникален.

function checkExistIdNum($enc_id_num=null) {
    $this->db->select('COUNT(*) AS count');
    $this->db->where("(id_num = '$enc_id_num' AND user_id != '".user_id()."')");
    $query = $this->db->get('user_info');
    $num = $query->row()->count;

    if($num>0) return true;
    else return false;
}

Оба имеют одинаковое истинное значение, но как я могу сравнить id_num = '$ enc_id_num', в то время как оба кодированных кода различны?

Ответы [ 2 ]

0 голосов
/ 19 марта 2011

Используйте встроенные функции шифрования базы данных, чтобы база данных индексировала значения и могла быстро сопоставляться с произвольным введенным вами значением. В противном случае вы просто заново изобретаете колесо, и вам придется либо сохранять отдельный индекс, с которым вы будете сравнивать каждый раз (очень медленно), либо расшифровывать и сравнивать каждую строку по отдельности (ЧРЕЗВЫЧАЙНО медленно).

Встроенное шифрование решает все это без возможности утечки конфиденциальных данных через индексы.

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

Поскольку вы не идентифицируете свою базу данных или версию PHP, я не могу быть более конкретным.

0 голосов
/ 18 марта 2011

Я думаю, что вы путаете понятие криптографического хэша и двухстороннего шифрования.

Хеш - это односторонний , и он всегда имеет один и тот же результат , учитывая идентичный ввод.

MD5 или SHA1 - это односторонние алгоритмы хеширования, которые обычно используются для маскировки паролей в базах данных, основная причина этого заключается в том, что-way, если хеш получен, его нельзя вернуть к исходному значению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...