Datei mit Mcrypt verschlüsseln / entschlüsseln
Versucht, zu schreiben ein paar Funktionen, die verschlüsseln oder entschlüsseln einer Datei und bin mit der Klasse gefunden hier, um zu versuchen und erreichen das:
http://www.itnewb.com/v/PHP-Encryption-Decryption-Using-the-MCrypt-Library-libmcrypt
Die Verschlüsselungs-Funktion unter zu funktionieren scheint, dass es scheint, verschlüsseln Sie die Datei und legen Sie es in das vorgesehene Verzeichnis. Ich versuche die Datei zu entschlüsseln jetzt, und es stirbt mit der Meldung "konnte nicht abgeschlossen Entschlüsselung" (kodiert es...) Es gibt nichts in die php error logs, also ich bin mir nicht sicher, warum es ist, zu scheitern, aber wie mcrypt ist völlig neu für mich, ich bin mehr als geneigt zu glauben, dass ich was falsch mache hier...
Hier sind die Funktionen:
//ENCRYPT FILE
function encryptFile() {
global $cryptastic;
$pass = PGPPASS;
$salt = PGPSALT;
$key = $cryptastic->pbkdf2($pass, $salt, 1000, 32) or die("Failed to generate secret key.");
if ($handle = opendir(PATH.'/ftpd')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$newfile = PATH.'/encrypted/'.$file.'.txt';
$msg = file_get_contents(PATH.'/ftpd/'.$file);
$encrypted = $cryptastic->encrypt($msg, $key) or die("Failed to complete encryption.");
$nfile = fopen($newfile, 'w');
fwrite($nfile, $encrypted);
fclose($nfile);
unlink(PATH.'/ftpd/'.$file);
}
}
closedir($handle);
}
//DECRYPT FILE
function inFTP() {
global $cryptastic;
$pass = PGPPASS;
$salt = PGPSALT;
$key = $cryptastic->pbkdf2($pass, $salt, 1000, 32) or die("Failed to generate secret key.");
if ($handle = opendir(PATH.'/encrypted')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$newfile = PATH.'/decrypted/'.$file;
$msg = PATH.'/encrypted/'.$file;
$decrypted = $cryptastic->decrypt($msg, $key) or die("Failed to complete decryption.");
$nfile = fopen($newfile, 'w');
fwrite($nfile, $decrypted);
fclose($nfile);
//unlink(PATH.'/encrypted/'.$file);
}
}
closedir($handle);
}
//$crypt->decrypt($file);
}
InformationsquelleAutor der Frage whitman6732 | 2010-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, diese PHP5-Klasse, die für die Verschlüsselung mit mcrypt. In diesem Fall ist es mithilfe von AES-Verschlüsselung. Sie wollen zu ändern, die Taste für jede Website, die Sie verwenden es auf. Wenn Sie nicht es verwenden, zumindest ist es führt Sie auf dem schreiben Ihrer eigenen version davon.
Verwendung:
Hinweise:
InformationsquelleAutor der Antwort John Conde
Während Johns Antwort ist gut, mithilfe der base64-Codierung nur zum fixieren der binären Frage der Sicherheit ist overkill und wird Ihre verschlüsselten Dateien zu 33% größer als das original. Hier ist mein PHP-Implementierung des AES-Crypt-Datei-format, das löst alle oben genannten Probleme transparent.
https://github.com/philios33/PHP-AES-File-Encryption
Es ist binary safe und umfasst authentifizierte Verschlüsselung. Da es verwendet die open-source-aes crypt-Datei-format (.aes), ist es vollständig kompatibel mit anderen .aes software.
https://www.aescrypt.com/
Die Schnittstelle ist ziemlich einfach, ob Sie verschlüsseln oder entschlüsseln. Sie nur geben Sie eine Quell-Datei und das Passwort.
InformationsquelleAutor der Antwort Phil
CakePHP hat eine ziemlich gute Umsetzung von rijndael. Ich bin nicht posting-code direkt hier, weil nicht sicher, dass die rechtlichen Konsequenzen.
Hier sind die api-docs für die
Security::rijndael()
Methode.Wenn die Kodierung einer Datei, werden Sie wollen, um
base64_encode()
bevor Sie diese Methode aufrufen mit 'encrypt
', undbase64_decode()
nach dem Aufruf dieser Methode mit 'decrypt
'InformationsquelleAutor der Antwort rynop
Sollten Sie nicht verwenden Mcrypt zum verschlüsseln/entschlüsseln von Daten. Wie gezeigt in Ihrer Frage und in der Antwort akzeptiert, werden die Daten nicht authentifiziert ist, das heißt, es wird ein Opfer ausgesucht ciphertext Angriffe.
Weiter, viel Aufwand wurde getan, um sicherzustellen, dass die Entwickler zusammen kryptographische primitive richtig. Als solche, statt Mcrypt, Sie sollten mit libsodium für Ihre PHP-Projekte. libsodium ist eine Abspaltung von NaCl. NaCl/libsodium geschrieben ist, zu entfernen viel von der kryptographischen Fallstricke, die Entwickler finden sich in, wie timing-Angriffe, die überprüfung der MAC-tags.
Mcrypt ist deprecated in PHP 7.1 und libsodim ist die bevorzugte Methode zum behandeln von Kryptographie in PHP.
Mit libsodium in Ihrem PHP-Projekt ist einfach und sicher. Scott Arciszewski geschrieben hat, ein umfangreiches ebook über die Verwendung libsodium mit PHP https://paragonie.com/book/pecl-libsodium. Es lohnt sich das Lesen für jedermann zu tun PHP Kryptographie.
InformationsquelleAutor der Antwort Aaron Toponce