Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Libsodium Extension als Alternative für entfernte Mcrypt Extension installieren (ab PHP 7.2)

Anleitung Entwicklung PHP

Mitglied: Frank

Frank (Level 5) - Jetzt verbinden

27.01.2017, aktualisiert 16:19 Uhr, 1215 Aufrufe, 1 Kommentar, 2 Danke

Da die PHP Mcrypt Extension ab PHP 7.2 entfernt wird, suche ich schon einige Zeit lang eine gute und sichere Alternative. Siehe dazu auch PHP RFC: Mcrypt Extension wird ab PHP 7.2 entfernt.

Meine Lösung heißt: Libsodium (a portable, cross-compilable, installable, packageable, API-compatible version of NaCl (Networking and Cryptography library)).

Dazu muss man die libsodium PHP Extension installieren (Alternativ gibt es sie auch auf GitHUB):

01.
pecl install libsodium
und in die php.ini folgende Zeile hinzufügen:
01.
extension=libsodium.so
Dann kann man überprüfen, ob alle funktioniert:

01.
<?php 
02.
var_dump([ 
03.
    \Sodium\library_version_major(), 
04.
    \Sodium\library_version_minor(), 
05.
    \Sodium\version_string() 
06.
]);
Es sollte die aktuelle Version der libsodium Extension erscheinen (kann natürlich variieren)

01.
$ php version_check.php 
02.
array(2) { 
03.
  [0] => 
04.
  int(9) 
05.
  [1] => 
06.
  int(2), 
07.
  [2] => 
08.
  string(6) "1.0.6" 
09.
}
Eine detailierte Installationsanleitung findet ihr hier:
https://paragonie.com/book/pecl-libsodium/read/00-intro.md#installing-li ...


Sichere Passwörter mit PHP erzeugen (benutzt Argon2 - Gewinner der Hashing Competition 2015)

01.
// Password hashing: 
02.
$hash_str = \Sodium\crypto_pwhash_str( 
03.
    $password
04.
    \Sodium\CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, 
05.
    \Sodium\CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE 
06.
); 
07.
// Password verification: 
08.
if (\Sodium\crypto_pwhash_str_verify($hash_str, $password)) { 
09.
    // recommended: wipe the plaintext password from memory 
10.
    \Sodium\memzero($password); 
11.
     
12.
    // Password was valid. 
13.
} else
14.
    // recommended: wipe the plaintext password from memory 
15.
    \Sodium\memzero($password); 
16.
     
17.
    // Password was invalid. 
18.
}

Basic Encryption

01.
$key = \Sodium\randombytes_buf(\Sodium\CRYPTO_SECRETBOX_KEYBYTES); 
02.
 
03.
// Using your key to encrypt information 
04.
$nonce = \Sodium\randombytes_buf(\Sodium\CRYPTO_SECRETBOX_NONCEBYTES); 
05.
$ciphertext = \Sodium\crypto_secretbox('test', $nonce, $key);

Basic Decryption

Dazu brauchen wir als Eingabe natürlich das selbe "nonce" und den selben "key" (siehe oben) um die Nachricht wieder zu entschlüsseln.

01.
$plaintext = \Sodium\crypto_secretbox_open($ciphertext, $nonce, $key); 
02.
if ($plaintext === false) { 
03.
    throw new Exception("Bad ciphertext"); 
04.
}

Hier eine erweitere Version mit AES-256 + GCM:

AEAD Encryption - Authenticated (secret-key) Encryption with Associated Data - AES-256 + GCM

01.
$key = \Sodium\randombytes_buf(\Sodium\CRYPTO_AEAD_AES256GCM_KEYBYTES); 
02.
if (\Sodium\crypto_aead_aes256gcm_is_available()) { 
03.
    $nonce = \Sodium\randombytes_buf(\Sodium\CRYPTO_AEAD_AES256GCM_NPUBBYTES); 
04.
    $ad = 'Additional (public) data'; 
05.
    $ciphertext = \Sodium\crypto_aead_aes256gcm_encrypt( 
06.
        $message
07.
        $ad
08.
        $nonce
09.
        $key 
10.
    ); 
11.
}

AEAD Decryption

Dazu brauchen wir als Eingabe natürlich das selbe "nonce" und den selben "key" (siehe oben) um die Nachricht wieder zu entschlüsseln.

01.
if (\Sodium\crypto_aead_aes256gcm_is_available()) { 
02.
    $decrypted = \Sodium\crypto_aead_aes256gcm_decrypt( 
03.
        $ciphertext
04.
        $ad
05.
        $nonce
06.
        $key 
07.
    ); 
08.
    if ($decrypted === false) { 
09.
        throw new Exception("Bad ciphertext"); 
10.
11.
}
Weitere Informationen und Beispiele für PHP findet ihr auf dieser Seite:
https://paragonie.com/book/pecl-libsodium

Viel Spaß beim Umbauen ...

Gruß
Frank
Ähnliche Inhalte
PHP
gelöst PHP Key - Value Dictionary in einer Schleife erzeugen (3)

Frage von facebraker zum Thema PHP ...

HTML
PHP Datei für das ABI (7)

Frage von mrcljnff zum Thema HTML ...

PHP
Empfehlung php Framework mit Material Design (5)

Frage von Androxin zum Thema PHP ...

Linux
Desinfect 2017 auf Festplatte installieren (4)

Frage von Lukas.N zum Thema Linux ...

Neue Wissensbeiträge
Heiß diskutierte Inhalte
Windows Systemdateien
NTFS und die Defragmentierung (26)

Frage von WinLiCLI zum Thema Windows Systemdateien ...

LAN, WAN, Wireless
Zwei Subnetze mit je eigenem Router und Internetzugang verbinden (18)

Frage von hannsgmaulwurf zum Thema LAN, WAN, Wireless ...

Windows Server
WIndows Server 2016 core auf dem Intel NUC NUC5i5RYK i5 5250U (17)

Frage von IxxZett zum Thema Windows Server ...