the password invalid encrypt decrypt php laravel encryption laravel-4 cryptography

php - password - laravel 4.2 consultas con una columna encriptada



sha laravel (2)

Actualmente tengo este código en mi controlador que muestra un conjunto de registros aquí está mi código

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'')); }

mi problema es que la columna dbo_guardianinformation.Address contiene registros encriptados que actualmente no tengo idea de dónde debería poner el código de descifrado para que cuando $vPa se pase a la vista ya contenga los registros descifrados. ¿algunas ideas? gracias a cualquiera que pueda ayudar


Indexar datos encriptados

Si necesita buscar una columna cifrada en una base de datos SQL rápida y eficientemente, necesita construir un índice oculto de los datos (es decir, almacenar hash_hmac(''sha256'', $plaintext, $separate_key_here) en una columna adicional) y estructurar su selección consultas basadas en eso. (El artículo vinculado explica los requisitos de seguridad).

Esto le ahorra tener que hacer un bucle foreach() pero, dado que se usa HMAC-SHA256, es increíblemente improbable que un atacante con acceso a la base de datos pueda extraer el texto sin formato del sistema.

Dicho esto, hay algo más que me gustaría abordar:

Criptografía Débil

Por favor, no use el código de encriptación que incluyó en su pregunta. Es muy inseguro. Laravel tiene su propia clase de encriptación ; por favor use eso en su lugar. Hace muchas cosas bien que el fragmento de código que incluyó no lo hace. Por ejemplo: proporciona cifrado autenticado .

$sptkey = md5(''sample_encryptkey'');

Si desea un poco de seguridad en su aplicación, nunca use md5($string) para generar una clave. Esta es solo una mala idea:

  • md5() devuelve una cadena hexadecimal de 32 caracteres
  • La mayoría de las funciones de cifrado esperan una cadena binaria en bruto
  • MD5 es una función hash increíblemente rota
  • Para transformar una contraseña en una clave de encriptación, debe usar una función de derivación de clave, es decir, P contraseña: F unción de falsación de KEY con la clave SHA-256 (PBKDF2-SHA256).

Considere, por ejemplo, este código en su lugar:

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 );

Expandí el espacio en blanco aquí y dejé algunos comentarios en línea a continuación:

$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 ) );

Lectura adicional sobre los problemas específicos:

Qué hacer en su lugar (elija uno):


Resulta que con un pequeño retoque y la ayuda de João Mendes tuve el código como este

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'')); }