Libsodium Extension als Alternative für entfernte Mcrypt Extension installieren (ab PHP 7.2)
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)).
Der folgende Installationsvorgang ist nur für PHP Versionen kleiner als 7.2.0 nötig. Alle Versionen darüber haben libsodium bereits integriert.
Dazu muss man die libsodium PHP Extension installieren (Alternativ gibt es sie auch auf GitHUB):
und in die php.ini folgende Zeile hinzufügen:
Dann kann man überprüfen, ob alle funktioniert:
Es sollte die aktuelle Version der libsodium Extension erscheinen (kann natürlich variieren)
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)
Basic Encryption
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.
Hier eine erweitere Version mit AES-256 + GCM:
AEAD Encryption - Authenticated (secret-key) Encryption with Associated Data - AES-256 + GCM
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.
Weitere Informationen und Beispiele für PHP findet ihr auf dieser Seite:
https://paragonie.com/book/pecl-libsodium
Viel Spaß beim Umbauen ...
Update vom 30.11.2017
Die Version PHP 7.2.0 hat seit dem 30.11.2017 libsodium integriert. Es wird libsodium-php 2.x verwendet. In der ursprünglichen Anleitung wurde libsodium-php 1.x verwendet. Ich habe die Codebeispiele für die Version 2.x angepasst. Auch https://paragonie.com/book/pecl-libsodium hat seine Beispiele an die neue Version angepasst.
Gruß
Frank
Meine Lösung heißt: Libsodium (a portable, cross-compilable, installable, packageable, API-compatible version of NaCl (Networking and Cryptography library)).
Der folgende Installationsvorgang ist nur für PHP Versionen kleiner als 7.2.0 nötig. Alle Versionen darüber haben libsodium bereits integriert.
Dazu muss man die libsodium PHP Extension installieren (Alternativ gibt es sie auch auf GitHUB):
pecl install libsodium
extension=sodium.so
Dann kann man überprüfen, ob alle funktioniert:
<?php
if (extension_loaded("sodium")) {
$constants = get_defined_constants(true);
var_dump([
SODIUM_LIBRARY_VERSION,
get_extension_funcs('sodium'),
$constants["sodium"]
]);
} else {
// sodium not found
}
Es sollte die aktuelle Version der libsodium Extension erscheinen (kann natürlich variieren)
$ php version_check.php
array(3) {
=>
string(6) "1.0.15"
[1]=>
array(82) {
=>
string(41) "sodium_crypto_aead_aes256gcm_is_available"
[1]=>
string(36) "sodium_crypto_aead_aes256gcm_decrypt"
[2]=>
string(36) "sodium_crypto_aead_aes256gcm_encrypt"
[3]=>
string(43) "sodium_crypto_aead_chacha20poly1305_decrypt"
[4]=>
string(43) "sodium_crypto_aead_chacha20poly1305_encrypt"
[5]=>
usw.
}
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)
// Password hashing:
$hash_str = sodium_crypto_pwhash_str(
$password,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
// Password verification:
if (sodium_crypto_pwhash_str_verify($hash_str, $password)) {
// recommended: wipe the plaintext password from memory
sodium_memzero($password);
// Password was valid.
} else {
// recommended: wipe the plaintext password from memory
sodium_memzero($password);
// Password was invalid.
}
Basic Encryption
$key = sodium_randombytes_buf(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
// Using your key to encrypt information
$nonce = sodium_randombytes_buf(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$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.
$plaintext = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
if ($plaintext === false) {
throw new Exception("Bad ciphertext");
}
Hier eine erweitere Version mit AES-256 + GCM:
AEAD Encryption - Authenticated (secret-key) Encryption with Associated Data - AES-256 + GCM
$key = sodium_randombytes_buf(SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES);
if (sodium_crypto_aead_aes256gcm_is_available()) {
$nonce = sodium_randombytes_buf(SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES);
$ad = 'Additional (public) data';
$ciphertext = sodium_crypto_aead_aes256gcm_encrypt(
$message,
$ad,
$nonce,
$key
);
}
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.
if (sodium_crypto_aead_aes256gcm_is_available()) {
$decrypted = sodium_crypto_aead_aes256gcm_decrypt(
$ciphertext,
$ad,
$nonce,
$key
);
if ($decrypted === false) {
throw new Exception("Bad ciphertext");
}
}
Weitere Informationen und Beispiele für PHP findet ihr auf dieser Seite:
https://paragonie.com/book/pecl-libsodium
Viel Spaß beim Umbauen ...
Update vom 30.11.2017
Die Version PHP 7.2.0 hat seit dem 30.11.2017 libsodium integriert. Es wird libsodium-php 2.x verwendet. In der ursprünglichen Anleitung wurde libsodium-php 1.x verwendet. Ich habe die Codebeispiele für die Version 2.x angepasst. Auch https://paragonie.com/book/pecl-libsodium hat seine Beispiele an die neue Version angepasst.
Gruß
Frank
Please also mark the comments that contributed to the solution of the article
Content-ID: 327712
Url: https://administrator.de/contentid/327712
Printed on: December 10, 2024 at 14:12 o'clock
2 Comments
Latest comment
Moin Frank,
als hättest du es gerochen... Libsodium in PHP: Krypto-Bibliothek für die Skriptsprache auf dem neuesten Stand der Technik
Gruß,
Dani
als hättest du es gerochen... Libsodium in PHP: Krypto-Bibliothek für die Skriptsprache auf dem neuesten Stand der Technik
Gruß,
Dani