Я нахожусь в проекте, который нам нужен, чтобы создать приложение для хранения конфиденциальной информации в базе данных MySQL. Я хочу, чтобы ключ повторно использовался в приложении, потому что нам нужно зашифровать введенные данные и расшифровать их позже, чтобы показать информацию.
Я изучаю libsodium, но у меня есть вопрос … Они рекомендуют не использовать ключ повторно, и, если мы последуем этому, мы не сможем расшифровать позже!
Может кто-нибудь поучить меня, как с этим бороться?
Мы создадим метод для стирания / изменения ключа при возможном нарушении!
Это действительно широкий вопрос. Это действительно зависит от того, какую информацию вы сохраняете и насколько она чувствительна.
Эта ссылка описывает типы шифрования и использование.
https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html
Одним из примеров является использование AES_ENCRYPT и AES_DECRYPT.
Вот краткий пример функций AES_ENCRYPT и AES_DECRYPT MySql.
Установите для таблицы базы данных двоичный тип, который я использую BLOB.
Во-вторых, создайте ключ для работы.
Вставить в БД в зашифрованном виде.
Выберите расшифрованные данные из базы данных.
Это сгенерирует случайную строку.
function randomString($length) {//This is a function to create a random String.
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$string = '';
for ($p = 0; $p < $length; $p++) {
$string .= $characters[mt_rand(0, strlen($characters)-1)];}
return $string;}
$ourKey = randimString(16);//get our String in a Varable($ourKey).
Используйте функцию MySQL AES_ENCRYPT на вашей Вставке.
$ourInsert = "INSERT INTO MY_TABLE(FIRST_NAME, OUR_KEY)VALUES(AES_ENCRYPT(FIRST_NAME,'".$ourKey."'), ".$ourKey.")";
Используйте функцию MySQL AES_DECRYPT, чтобы расшифровать ее.
$ourSelect = "SELECT AES_DECRYPT(FIRST_NAME, OUR_KEY) AS FIRST_NAME";
Для паролей и более конфиденциальных данных используйте PHP-функцию password_hash (). Ваша таблица дБ должна быть не менее 75 CHARS для этого. Вот ссылка, которая объясняет более подробно.
http://www.php.net/manual/en/function.password-hash.php
Обратите внимание, что вы не можете расшифровать пароль_хэша, совпадающий только с другими данными.
Пример использования password_hash для хеширования пароля и его вставки в БД.
$hashedPassWord = password_hash(users password, PASSWORD_BCRYPT, array("cost" => 17));
$insertPass = "INSERT INTO MY_TABLE(PASSWORD)VALUES(".$hashedPassWord.")";
и для проверки по хешированному паролю выберите пароль из базы данных и используйте проверку пароля, чтобы сопоставить его с хешированным паролем.
if (password_verify(users_input, db_password_hash)) {/*do something*/}
Обратите внимание, что это только охватывает самые основы. Есть и другие вещи, которые вам нужно сделать, такие как использование подготовленных операторов в PHP и экранирование строк. Я только коснулся вопроса шифрования, чтобы вы начали.
Других решений пока нет …