php - password - use laravel hash




Laravel 4.2 fragt mit einer verschlüsselten Spalte ab (2)

Ich habe derzeit diesen Code in meinem Controller, die eine Reihe von Datensätzen hier ist mein Code

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

mein Problem ist, dass die Spalte dbo_guardianinformation.Address verschlüsselte Datensätze enthält, die ich derzeit keine Ahnung habe, wo sollte ich den Entschlüsselungscode setzen, so dass, wenn das $vPa an die Ansicht übergeben wird, enthielt es bereits die entschlüsselten Datensätze. irgendwelche Ideen? Danke an alle, die helfen würden


Verschlüsselte Daten indizieren

Wenn Sie eine verschlüsselte Spalte in einer SQL-Datenbank schnell und effizient durchsuchen müssen, müssen Sie einen Blind-Index der Daten erstellen (dh speichern Sie hash_hmac('sha256', $plaintext, $separate_key_here) in einer zusätzlichen Spalte) und strukturieren Sie Ihre Auswahl Abfragen basierend darauf. (Der verlinkte Artikel erläutert die Sicherheitsanforderungen.)

Dadurch ersparen Sie sich eine foreach() Schleife, aber da HMAC-SHA256 verwendet wird, ist es unwahrscheinlich, dass ein Angreifer mit Zugriff auf die Datenbank den Klartext aus dem System herausholen kann.

Allerdings möchte ich noch etwas anderes ansprechen:

Schwache Kryptographie

Bitte verwenden Sie nicht den Verschlüsselungscode, den Sie in Ihrer Frage angegeben haben. Es ist sehr unsicher. Laravel hat seine eigene Verschlüsselungsklasse ; Bitte benutze das stattdessen. Es tut eine Menge der Dinge richtig, dass das Code-Snippet, das Sie eingeschlossen haben, nicht tut. Zum Beispiel: Es bietet authentifizierte Verschlüsselung .

$sptkey = md5('sample_encryptkey');

Wenn Sie in Ihrer Anwendung ein Minimum an Sicherheit wünschen, verwenden Sie niemals md5($string) , um einen Schlüssel zu generieren. Das ist nur eine schlechte Idee:

  • md5() gibt eine 32-stellige hexadezimale Zeichenfolge zurück
  • Die meisten Verschlüsselungsfunktionen erwarten eine rohe Binärzeichenfolge
  • MD5 ist eine unglaublich kaputte Hash-Funktion
  • Um ein Passwort in einen Chiffrierschlüssel umzuwandeln, müssen Sie eine Schlüsselableitungsfunktion verwenden, dh P assword- Based Key- D ieraktivierungsfunktion # 2 mit SHA-256 (PBKDF2-SHA256).

Betrachten Sie zum Beispiel diesen Code stattdessen:

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

Ich habe den Whitespace hier vergrößert und einige Inline-Kommentare hinterlassen:

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

Weitere Informationen zu den spezifischen Themen:

Was ist stattdessen zu tun (wählen Sie einen):


Es stellt sich heraus, dass ich mit ein wenig Basteln und Hilfe von João Mendes den Code so hatte

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




cryptography