it-swarm.com.de

Wie benutzt man sha256 in PHP5.3.0?

Ich verwende sha256, um das Passwort zu verschlüsseln. Ich kann das sha256-verschlüsselte Passwort in Mysql speichern. Aber ich kann mich nicht mit derselben Klausel einloggen.

Code eingeben:

<?php
error_reporting(E_ALL ^ E_NOTICE);
$username = $_POST['uusername'];
$passcode = $_POST['ppasscode'];
$userflag = $_POST['uuserflag'];
//$passcodeen = hash('sha256',$passcode);
$passcodeen = hash('sha256', (get_magic_quotes_gpc() ? stripslashes($ppasscode) : $ppasscode));
$conn = mysql_connect("localhost","charles","charles") or die("connection failed with DB:".mysql_error());
mysql_select_db("sessiondb");
$query = "INSERT INTO users(username,passcode,userflag) values('$username','$passcodeen','$userflag')";

Code auswählen:

<?php 
error_reporting(E_ALL ^ E_NOTICE);

    @mysql_connect("localhost","charles","charles") or die("Connection failed".mysql_error());
    @mysql_select_db("sessiondb") or die("Database doesn't exist".mysql_error());
    //get user input
    $username = $_POST['username'];
    $ppasscode = $_POST['ppasscode'];
    //$passcodeen = hash('sha256', $ppasscode);
    $passcodeen = hash('sha256', (get_magic_quotes_gpc() ? stripslashes($ppasscode) : $ppasscode));
    //get session value from mysql
    $query = @mysql_query("select username, userflag from users where username ='$username' and passcode = '$passcodeen'") or die("Query execution failed".mysql_error());

Stimmt irgendetwas nicht? Ich bin sehr verwirrt. Vielen Dank. 

32
Jiangong SUN

Könnte dies ein Tippfehler sein? (zwei Ps in ppasscode, beabsichtigt?)

$_POST['ppasscode'];

Ich würde dafür sorgen und tun:

print_r($_POST);

und stellen Sie sicher, dass die Daten dort genau sind, und geben Sie dann heraus, wie sie aussehen sollen:

echo hash('sha256', $_POST['ppasscode']);

Vergleichen Sie diese Ausgabe mit dem, was Sie in der Datenbank haben (manuell). Auf diese Weise erkunden Sie Ihre möglichen Fehlerpunkte:

  1. Passwort vom Formular erhalten
  2. hashing des Passworts
  3. gespeichertes Passwort
  4. vergleich der beiden. 
51
Jeremy Morgan

Sha256 ist zunächst ein Hash-Algorithmus und keine Verschlüsselung. Eine Verschlüsselung würde eine Möglichkeit erfordern, die Informationen auf ihren ursprünglichen Wert (d. H. Kollisionen) zu entschlüsseln.

Wenn Sie Ihren Code betrachten, scheint es zu funktionieren, wenn Sie den korrekten Parameter angeben.

  • Versuchen Sie zunächst, eine Literal-Zeichenfolge in Ihrem Code zu verwenden, und überprüfen Sie deren Gültigkeit, anstatt die Variable $_POST[] zu verwenden

  • Versuchen Sie, den Vergleich von der Datenbankabfrage in den Code zu verschieben (holen Sie den Hash für den angegebenen Benutzer ab und vergleichen Sie ihn mit dem soeben berechneten Hash).

Bevor Sie dies jedoch auf öffentliche Art und Weise bereitstellen, sollten Sie Ihre Eingaben bereinigen. Lassen Sie nicht zu, dass beliebiges SQL in die Abfragen eingefügt wird. Die beste Idee wäre hier, parametrisierte Abfragen zu verwenden.

11
Yannick Motton

Sie sollten adaptives Hashing wie http://en.wikipedia.org/wiki/Bcrypt verwenden, um Kennwörter zu sichern

1
Edwin M

Zuerst müssen Sie einen Vergleich der Funktionen von SHA durchführen und sich für den sichersten Algorithmus entscheiden, der Ihre Programmiersprache (PHP) unterstützt.

Dann können Sie die offizielle Dokumentation kauen, um die Funktion hash() zu implementieren, die den von Ihnen gewählten Verschlüsselungsalgorithmus und das unformatierte Kennwort als Argument erhält.

sha256 => 64 bitssha384 => 96 bitssha512 => 128 bits

Je sicherer der Verschlüsselungsalgorithmus ist, desto höher sind die Kosten für die Verschlüsselungs- und Entschlüsselungszeit auf der Serverseite.

$hashedPassword = hash('sha256', $password);
1
IT Developers

Eine bessere Lösung ist die Verwendung des hervorragenden Kompatibilitätsskripts von Anthony Ferrara:

https://github.com/ircmaxell/password_compat

Fügen Sie bei der Überprüfung des Kennworts immer eine Möglichkeit hinzu (vorzugsweise asynchron, damit der Überprüfungsvorgang für das Anpassen von Angriffen nicht beeinträchtigt wird), um den Hash bei Bedarf zu aktualisieren.

0
Luis Ferro