Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 1500 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
Administrator.de Feedback
Entwicklertagebuch: PHP 7 (4)

Information von admtech zum Thema Administrator.de Feedback ...

Webbrowser
gelöst Daten in entfernte Mysql DB schreiben (3)

Frage von nullacht15 zum Thema Webbrowser ...

Netzwerkmanagement
gelöst Alternativen zum Updateserver (12)

Frage von Adrians zum Thema Netzwerkmanagement ...

RedHat, CentOS, Fedora
gelöst CentOS: Aktualisierung von 7.2 zu 7.3 (5)

Frage von honeybee zum Thema RedHat, CentOS, Fedora ...

Neue Wissensbeiträge
Viren und Trojaner

Link: Neues Botnetz über IoT-Geräte

Information von certifiedit.net zum Thema Viren und Trojaner ...

Ubuntu

Ubuntu 17.10 steht zum Download bereit

(3)

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(8)

Information von thomasreischer zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Windows Server
Frage zu Server Rack (11)

Frage von rainergugus zum Thema Windows Server ...

Switche und Hubs
gelöst VLAN für Gäste WLAN einrichten über FritzBox und Switch (10)

Frage von Elo-14 zum Thema Switche und Hubs ...

Windows Installation
Windows 10 neu installieren (10)

Frage von imebro zum Thema Windows Installation ...