как зашифровать письма в базе данных mysql, но при этом иметь возможность запрашивать их? - PullRequest
7 голосов
/ 30 января 2011

Я хочу хранить адреса электронной почты пользователей в базе данных MySQL с использованием шифрования, чтобы гарантировать, что они не будут обнародованы, если база данных будет взломана.Я считаю, что если я зашифрую их с помощью функции AES_ENCRYPT() в mysql, я не смогу создать индекс в таблице INNODB, потому что мне нужно использовать тип данных BLOB.Если таблица становится очень большой, выбор займет много времени.

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

Ответы [ 3 ]

11 голосов
/ 30 января 2011

Когда пользователь регистрируется на вашем сайте, используйте AES_ENCRYPT () для шифрования электронной почты.

INSERT into users (email) VALUES (AES_ENCRYPT('someemail@example.com', 'aeskey'));

Когда вы запрашиваете свою базу данных, вы можете вызвать функцию AES_DECRYPT (), например:

SELECT AES_DECRYPT(email, 'aeskey') from users;
4 голосов
/ 30 января 2011

Если вы хэшируете адреса с помощью SHA-256 или чего-то подобного, вы все равно можете индексировать свои таблицы, вы все равно можете выполнять быстрый поиск адресов (когда пользователь ищет example@example.com, вы просто хешируете ввод ивыберите подходящие хэши в таблицах).

ssh использует очень похожий трюк хеширования .(Подробности смотрите на -H на этой странице.)

0 голосов
/ 30 января 2011

AES_DECRYPT (электронная почта, 'secretkey') и AES_ENCRYPT (электронная почта, 'secretkey') - оптимальное решение,

Я не уверен на 100% в том, чтобы быть уникальным после шифрования, но теория говорит, что если электронная почта уникальна, подпись должна быть уникальной

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