Heim Backend-Entwicklung PHP-Tutorial PHP-Sicherheitsverschlüsselungstechnologie

PHP-Sicherheitsverschlüsselungstechnologie

Nov 21, 2016 pm 04:11 PM
php

Ein PHP-Entwickler sollte vor allem mit den folgenden Verschlüsselungsmethoden vertraut sein:

l Symmetrische Verschlüsselung

l Asymmetrische Verschlüsselung (öffentlicher Schlüssel)

l Hash-Funktion (Informationszusammenfassung)

l Informationsüberprüfungscode

Dieser Anhang konzentriert sich hauptsächlich auf den symmetrischen Verschlüsselungsalgorithmus unter Verwendung der mcrypt-Erweiterung. Die Informationen, auf die Sie sich beziehen müssen, lauten wie folgt:

Applied Cryptography, von Bruce Schneier (Wiley)

http://www.schneier.com/blog /

http://wikipedia.org/wiki/Cryptography

http://phpsec.org/articles/2005/password-hashing.html

http:/ / pear.php.net/package/Crypt_HMAC

http://pear.php.net/package/Crypt_RSA

C.1. Passwortspeicherung

Wenn Sie Passwörter in einer Datenbank speichern, speichern Sie sie niemals im Klartext. Speichern Sie stattdessen den Hashwert des Passworts und verwenden Sie gleichzeitig zusätzliche Zeichenfolgen:

<?php
 
  /* $password contains the password. */
 
  $salt = &#39;SHIFLETT&#39;;
  $password_hash = md5($salt . md5($password . $salt));
 
  /* Store password hash. */
 
  ?>
Nach dem Login kopieren

Wenn Sie bestätigen müssen, ob ein Passwort korrekt ist, berechnen Sie den Hash-Wert auf die gleiche Weise und vergleichen Sie die Ähnlichkeiten und Unterschiede:

<?php
 
  $salt = &#39;SHIFLETT&#39;;
  $password_hash = md5($salt . md5($_POST[&#39;password&#39;] . $salt));
 
  /* Compare password hashes. */
 
  ?>
Nach dem Login kopieren

Wenn der Hash Wenn die Werte genau gleich sind, haben Sie Grund zu der Annahme, dass auch das Passwort dasselbe ist.

Wenn dieser Trick angewendet wird, ist es unmöglich, dem Benutzer sein Passwort mitzuteilen. Wenn ein Benutzer sein Passwort vergisst, können Sie ihn nur bitten, ein neues Passwort einzugeben und den Hash-Wert neu zu berechnen und in der Datenbank zu speichern. Natürlich müssen Sie bei der Authentifizierung von Benutzern sehr vorsichtig sein – Passwort-Erinnerungen sind ein häufiges Ziel von Angriffen und eine häufige Quelle von Sicherheitsverletzungen.

C.2. Verwendung von mcrypt

Die Standard-Verschlüsselungserweiterung von PHP ist mcrypt, die viele verschiedene Verschlüsselungsalgorithmen unterstützt. Sie können die Liste der auf Ihrer Plattform unterstützten Algorithmen über die Funktion mcrypt_list_algorithms() anzeigen:

<?php
 
  echo &#39;<pre class="brush:php;toolbar:false">&#39; . print_r(mcrypt_list_algorithms(), TRUE) . &#39;
'; ?>
Nach dem Login kopieren

Ver- und Entschlüsselung werden durch mcrypt_encrypt() und mcrypt_decrypt() durchgeführt. Funktionen bzw. erfüllen. Beide Funktionen verfügen über 5 Parameter. Der erste Parameter wird verwendet, um den verwendeten Algorithmus anzugeben:

 <?php
 
  mcrypt_encrypt($algorithm,
                 $key,
                 $cleartext,
                 $mode,
                 $iv);
 
  mcrypt_decrypt($algorithm,
                 $key,
                 $ciphertext,
                 $mode,
                 $iv);
 
  ?>
Nach dem Login kopieren

Der Verschlüsselungsschlüssel (der zweite Parameter) ist eine sehr sensible Datenquelle, die Sie erstellen möchten Stellen Sie sicher, dass Sie es an einem sicheren Ort aufbewahren. Verschlüsselungsschlüssel können mit den Methoden zum Schutz von Datenbankberechtigungen in Kapitel 8 geschützt werden. Wenn die finanziellen Bedingungen es zulassen, sind Hardware-Verschlüsselungsschlüssel die beste Wahl, da sie äußerst hohe Sicherheit bieten.

Die Funktion verfügt über mehrere Modi zur Auswahl. Sie können mcrypt_list_modes() verwenden, um alle unterstützten Modi aufzulisten:

<?php
 
  echo &#39;<pre class="brush:php;toolbar:false">&#39; . print_r(mcrypt_list_modes(), TRUE) . &#39;
'; ?>
Nach dem Login kopieren

Der fünfte Parameter ($ iv) ist der Initialisierungsvektor, der mit der Funktion mcrypt_create_iv() erstellt werden kann.

Die folgende Beispielklasse stellt grundlegende Verschlüsselungs- und Entschlüsselungsmethoden bereit:

class crypt
  {
    private $algorithm;
    private $mode;
    private $random_source;
 
    public $cleartext;
    public $ciphertext;
    public $iv;
 
    public function __construct($algorithm = MCRYPT_BLOWFISH,
                                $mode = MCRYPT_MODE_CBC,
                                $random_source = MCRYPT_DEV_URANDOM)
    {
      $this->algorithm = $algorithm;
      $this->mode = $mode;
      $this->random_source = $random_source;
    }
 
    public function generate_iv()
    {
      $this->iv = mcrypt_create_iv(mcrypt_get_iv_size($this->algorithm,
        $this->mode), $this->random_source);
    }
 
    public function encrypt()
    {
      $this->ciphertext = mcrypt_encrypt($this->algorithm,
        $_SERVER[&#39;CRYPT_KEY&#39;], $this->cleartext, $this->mode, $this->iv);
    }
 
    public function decrypt()
    {
      $this->cleartext = mcrypt_decrypt($this->algorithm,
        $_SERVER[&#39;CRYPT_KEY&#39;], $this->ciphertext, $this->mode, $this->iv);
    }
  }
 
  ?>
Nach dem Login kopieren

Die obige Klasse wird in anderen Beispielen verwendet. Das Folgende ist ein Beispiel für ihre Verwendung :

<?php
 
  $crypt = new crypt();
 
  $crypt->cleartext = &#39;This is a string&#39;;
  $crypt->generate_iv();
  $crypt->encrypt();
 
  $ciphertext = base64_encode($crypt->ciphertext);
  $iv = base64_encode($crypt->iv);
 
  unset($crypt);
 
  /* Store $ciphertext and $iv (initialization vector). */
 
  $ciphertext = base64_decode($ciphertext);
  $iv = base64_decode($iv);
 
  $crypt = new crypt();
 
  $crypt->iv = $iv;
  $crypt->ciphertext = $ciphertext;
  $crypt->decrypt();
 
  $cleartext = $crypt->cleartext;
?>
Nach dem Login kopieren

Tipps

Diese Erweiterung erfordert die Verwendung des Flags -mcrypt beim Kompilieren von PHP. Installationsanweisungen und Anforderungen finden Sie unter http://php.net/mcrypt.

C.3. Speicherung von Kreditkartennummern

Ich werde oft gefragt, wie ich Kreditkartennummern sicher speichern kann. Meiner beginnt immer mit der Frage, ob die Kreditkartennummer wirklich gespeichert werden muss. Denn egal wie man es macht, es ist unklug, unnötige Risiken einzugehen. Gleichzeitig gibt es in den nationalen Gesetzen auch Regelungen zur Verarbeitung von Kreditkarteninformationen. Ich erinnere mich immer daran, dass ich kein Rechtsexperte bin.

In diesem Buch werde ich nicht speziell auf Kreditkartenverarbeitungsmethoden eingehen, sondern erklären, wie verschlüsselte Informationen in der Datenbank gespeichert und beim Lesen entschlüsselt werden. Dieser Prozess führt zu einer Verschlechterung der Systemleistung, bietet jedoch eine Schutzschicht. Der Hauptvorteil besteht darin, dass im Falle eines Lecks des Datenbankinhalts nur die verschlüsselten Informationen offengelegt werden. Voraussetzung ist jedoch, dass der Verschlüsselungsschlüssel sicher ist. Daher ist der Verschlüsselungsschlüssel genauso wichtig wie die Implementierung der Verschlüsselung selbst.

Der Prozess des Speicherns verschlüsselter Daten in Daten besteht darin, zunächst die Daten zu verschlüsseln, dann Chiffretext über den ursprünglichen Vektor und Klartext zu erstellen und ihn in der Datenbank zu speichern. Da es sich bei dem Chiffretext um eine Binärzeichenfolge handelt, muss er über base64_encode() in eine normale Textzeichenfolge konvertiert werden, um eine sichere Speicherung der Binärcodierung zu gewährleisten.

  <?php
 
  $crypt = new crypt();
 
  $crypt->cleartext = &#39;1234567890123456&#39;;
  $crypt->generate_iv();
  $crypt->encrypt();
 
  $ciphertext = $crypt->ciphertext;
  $iv = $crypt->iv;
 
  $string = base64_encode($iv . $ciphertext);
 
  ?>
Nach dem Login kopieren

Speichern Sie die Zeichenfolge in der Datenbank. Beim Lesen handelt es sich um die umgekehrte Verarbeitung des obigen Prozesses:

 <?php
 
  $string = base64_decode($string);
 
  $iv_size = mcrypt_get_iv_size($algorithm, $mode);
 
  $ciphertext = substr($string, $iv_size);
  $iv = substr($string, 0, $iv_size);
 
  $crypt = new crypt();
 
  $crypt->iv = $iv;
  $crypt->ciphertext = $ciphertext;
  $crypt->decrypt();
 
  $cleartext =  $crypt->cleartext;
 
  ?>
Nach dem Login kopieren

Bei dieser Implementierungsmethode wird davon ausgegangen, dass der Verschlüsselungsalgorithmus und -modus unverändert bleiben. Wenn sie nicht definiert sind, müssen Sie sie auch speichern, um sie beim Entschlüsseln der Daten verwenden zu können. Der Verschlüsselungsschlüssel ist die einzige Information, die geheim gehalten werden muss.

C.4. Sitzungsdaten verschlüsseln

如果你的数据库存在安全问题,或者部分保存在会话中的数据是敏感的,你可能希望加密会话数据。除非很有必要,一般我不推荐这样做,但是如果你觉得在你的情形下需要这样做的话,本节提供了一个实现方法的示例。

这个方案十分简单。实际上,在第八章中,已经说明了如何通过调用session_set_save_handler( )来执行你自己的会话机制。通过对保存和读取数据的函数的少量调整,你就能加密存入数据库的数据及在读取时解密数据:

  <?php
 
  function _read($id)
  {
    global $_sess_db;
 
    $algorithm = MCRYPT_BLOWFISH;
    $mode = MCRYPT_MODE_CBC;
 
    $id = mysql_real_escape_string($id);
 
    $sql = "SELECT data
            FROM   sessions
            WHERE  id = &#39;$id&#39;";
 
    if ($result = mysql_query($sql, $_sess_db))
    {
        $record = mysql_fetch_assoc($result);
 
        $data = base64_decode($record[&#39;data&#39;]);
 
        $iv_size = mcrypt_get_iv_size($algorithm, $mode);
 
        $ciphertext = substr($data, $iv_size);
        $iv = substr($data, 0, $iv_size);
 
        $crypt = new crypt();
 
        $crypt->iv = $iv;
        $crypt->ciphertext = $ciphertext;
        $crypt->decrypt();
 
        return $crypt->cleartext;
    }
 
    return &#39;&#39;;
  }
 
  function _write($id, $data)
  {
    global $_sess_db;
 
    $access = time();
 
    $crypt = new crypt();
 
    $crypt->cleartext = $data;
    $crypt->generate_iv();
    $crypt->encrypt();
 
    $ciphertext = $crypt->ciphertext;
    $iv = $crypt->iv;
 
    $data = base64_encode($iv . $ciphertext);
 
    $id = mysql_real_escape_string($id);
    $access = mysql_real_escape_string($access);
    $data = mysql_real_escape_string($data);
 
    $sql = "REPLACE
            INTO    sessions
            VALUES  (&#39;$id&#39;, &#39;$access&#39;, &#39;$data&#39;)";
 
    return mysql_query($sql, $_sess_db);
  }
  ?>
Nach dem Login kopieren


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP ist ein Open-Source-MVC-Framework. Es erleichtert die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich. CakePHP verfügt über eine Reihe von Bibliotheken, um die Überlastung der häufigsten Aufgaben zu reduzieren.

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

See all articles