В настоящее время у меня этот код в контроллере, который отображает набор записей, вот мой код
public function view() { $title = "View Guardian Information"; $vPa = DB::table('dbo_guardianinformation') ->join('dbo_cities', 'dbo_guardianinformation.CityID', '=' , 'dbo_cities.CityID') ->select('dbo_guardianinformation.ParentAccountID','dbo_guardianinformation.FirstName','dbo_guardianinformation.LastName','dbo_guardianinformation.Roles', 'dbo_guardianinformation.Address','dbo_cities.CityName','dbo_guardianinformation.Status','dbo_guardianinformation.EmailAddress') ->get(); //encrypt decrypt algo // $sptkey = md5('sample_encryptkey'); // $enPass = rtrim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $sptkey, $defPass, MCRYPT_MODE_ECB))); // $decPass = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $sptkey, base64_decode($enPass), MCRYPT_MODE_ECB)); return View::make('ssims.view_parentAccount',compact('title','vPa')); }
моя проблема в том, что столбец dbo_guardianinformation.Address
содержит зашифрованные записи, которые я в настоящее время не знаю, куда я должен поместить код дешифрования, чтобы при $vPa
в представление он уже содержал дешифрованные записи. есть идеи? благодаря тому, кто поможет
Если вам нужно быстро и эффективно искать зашифрованный столбец в базе данных SQL , вам нужно построить слепой индекс данных (например, сохранить hash_hmac('sha256', $plaintext, $separate_key_here)
в дополнительном столбце) и структурировать ваш выбор запросов на основе этого. (Связанная статья объясняет требования безопасности.)
Это избавит вас от необходимости делать цикл foreach()
но, поскольку HMAC-SHA256 используется, невероятно маловероятно, что злоумышленник с доступом к базе данных сможет дразнить открытый текст из системы.
Тем не менее, есть еще кое-что, о чем я хотел бы обратиться:
Пожалуйста, не используйте код шифрования, который вы включили в свой вопрос. Это очень неуверенно. Laravel имеет собственный класс шифрования ; используйте это вместо этого. Он многое делает правильно, что фрагмент кода, который вы включили, не работает. Например: он обеспечивает аутентифицированное шифрование .
$sptkey = md5('sample_encryptkey');
Если вы хотите получить степень безопасности в своем приложении, никогда не используйте md5($string)
для генерации ключа. Это всего лишь плохая идея:
md5()
возвращает шестнадцатеричную строку с 32 символами Рассмотрим, например, этот код:
define('MY_APP_PBKDF2_ITERATIONS', 86000); define('MY_APP_KEY_LENGTH', 32); // or 16 for AES-128 // ... $sptkey = hash_pbkdf2( 'sha256', $your_password, $salt, // 32 bytes from /dev/urandom MY_APP_PBKDF2_ITERATIONS, MY_APP_KEY_LENGTH, true );
Я расширил пробелы здесь и оставил некоторые встроенные комментарии ниже:
$enPass = rtrim( // Unnecessary, base64_encode doesn't leave whitespace base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, // This isn't AES-256 by the way $sptkey, $defPass, MCRYPT_MODE_ECB // ECB mode is the worst mode ) ) ); $decPass = rtrim( // Padding oracle attack mcrypt_decrypt( MCRYPT_RIJNDAEL_256, $sptkey, base64_decode($enPass), // No error checking MCRYPT_MODE_ECB ) );
Дальнейшее чтение по конкретным вопросам:
MCRYPT_RIJNDAEL_256
MCRYPT_MODE_ECB
Что делать (выберите один):
оказывается, я немного потрудился и помог от Жоао Мендеса, у меня был код вроде этого
public function view() { $title = "View Guardian Information"; $vPa = DB::table('dbo_guardianinformation') ->join('dbo_cities', 'dbo_guardianinformation.CityID', '=' , 'dbo_cities.CityID') ->select('dbo_guardianinformation.ParentAccountID','dbo_guardianinformation.FirstName','dbo_guardianinformation.LastName','dbo_guardianinformation.Roles', 'dbo_guardianinformation.Address','dbo_cities.CityName','dbo_guardianinformation.Status','dbo_guardianinformation.EmailAddress') ->get(); foreach ($vPa as $key => $dvPa) { $sptkey = md5('this is secret'); $enAdd = $dvPa->Address; $decAdd = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $sptkey, base64_decode($enAdd), MCRYPT_MODE_ECB)); $dvPa->Address = $decAdd; } return View::make('ssims.view_parentAccount',compact('title','vPa')); }