PHP-приложение с конфиденциальными данными - шифрование / дешифрование - PullRequest
0 голосов
/ 11 сентября 2018

Я нахожусь в проекте, который нам нужен, чтобы создать приложение для хранения конфиденциальной информации в базе данных mysql. Я хочу, чтобы ключ повторно использовался в приложении, потому что нам нужно зашифровать введенные данные и расшифровать их позже, чтобы показать информацию.

Я изучаю libsodium, но у меня есть вопрос ... Они рекомендуют не использовать ключ повторно, и, если мы последуем этому, мы не сможем расшифровать позже!

Может кто-нибудь научить меня, как с этим бороться?

Мы создадим метод стирания / изменения ключа при возможном нарушении!

1 Ответ

0 голосов
/ 11 сентября 2018

Это действительно широкий вопрос. Это действительно зависит от того, какую информацию вы сохраняете и насколько она чувствительна. Эта ссылка описывает типы шифрования и использование.

https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html

Один из примеров - использование AES_ENCRYPT и AES_DECRYPT.

Вот краткий пример функций AES_ENCRYPT и AES_DECRYPT MySql.

  1. Установить для таблицы базы данных двоичный тип, который я использую BLOB.

  2. Затем создайте ключ для работы.

  3. Вставить в дБ в зашифрованном виде.

  4. Выбор расшифрованных данных из базы данных.

Это сгенерирует случайную строку.

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 и экранирование строк. Я только коснулся вопроса шифрования, чтобы вы начали.

...