• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Mcrypt

T

ToM80

Guest
Hi,

ich wollte eine Textdatei verschlüsseln. Dafür nutze ich folgende Funktion:
PHP:
function easyEncrypt($dir,$key,$data,$alg=MCRYPT_CAST_256,$modus=MCRYPT_MODE_CFB) {
	$iv=mcrypt_create_iv(mcrypt_get_iv_size($alg,$modus),MCRYPT_DEV_URANDOM);
	if ($dir=='1') {
		$data=mcrypt_encrypt($alg,$key,$data,$modus,$iv);
		$data=base64_encode($data);
	} else {
		$data=mcrypt_decrypt($alg,$key,base64_decode($data),$modus,$iv);
	}
	return $data;
}
rufe ich diese nun auf mit:
PHP:
$tmpArr=easyEncrypt(1, md5('abcd'), 'amen');
$tmpArr=easyEncrypt(0, md5('abcd'), $tmpArr);
echo $tmpArr
Bekomme ich immer noch stuss, sprich irgendwelche wirren zeichen statt dem Klartext zurück.
Habe ich eine längere Textdatei, so sind die ersten Zeichen Hyroglyphen und der Rest erscheint im Klartext. Ich bräuchte eine Hilfestellung wo ich einen Fehler mache? Setze mich gerade zum ersten mal mit mcrypt auseinander. Möchte aber aus Sicherheitsgründen dass spezielle Dateien nur Verschlüsselt in der Gegend rumliegen.
 
Code:
function easyEncrypt($dir,$key,$data,$alg=MCRYPT_CAST_256,$modus=MCRYPT_MODE_CFB) {
    global $iv;
    if ($dir=='1') {
        $data=mcrypt_encrypt($alg,$key,$data,$modus,$iv);
        $data=base64_encode($data);
    } else {
        $data=mcrypt_decrypt($alg,$key,base64_decode($data),$modus,$iv);
    }
    return $data;
}  

$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_CAST_256,MCRYPT_MODE_CFB),MCRYPT_DEV_URANDOM);
$tmpArr=easyEncrypt(1, md5('abcd'), 'amen');
$tmpArr=easyEncrypt(0, md5('abcd'), $tmpArr);
echo $tmpArr;
- sonst aber wehnig Ahnugn von der Materie (und der Code ist so natürlich nicht zu gebrauchen).
 
Bekomme ich immer noch stuss, sprich irgendwelche wirren zeichen statt dem Klartext zurück.
Habe ich eine längere Textdatei, so sind die ersten Zeichen Hyroglyphen und der Rest erscheint im Klartext. Ich bräuchte eine Hilfestellung wo ich einen Fehler mache?
Ich würde mal sagen, das hat mit den zwei verschiedenen Initialisierungs-Vektoren zusammen, die Du generieren läßt. Jeder wird mit einer anderen Zufallszahl als Ausgangspunkt generiert und kann dann natürlich nicht zum selben Ergebnis kommen. Kannst zum Vergleich zweimal den gleichen String mit gleichem Key verschlüsseln lassen und dann die beiden verschlüsselten Strings ausgeben lassen, sie dürften unterschiedlich sein.

ninja'ed by kkapsner :)
 
sauberer wäre das allerdings mit static
PHP:
function easyEncrypt($dir,$key,$data,$alg=MCRYPT_CAST_256,$modus=MCRYPT_MODE_CFB) {
    static $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_CAST_256,MCRYPT_MODE_CFB),MCRYPT_DEV_URANDOM);
    if ($dir=='1') {
        $data=mcrypt_encrypt($alg,$key,$data,$modus,$iv);
        $data=base64_encode($data);
    } else {
        $data=mcrypt_decrypt($alg,$key,base64_decode($data),$modus,$iv);
    }
    return $data;
}
$tmpArr=easyEncrypt(1, md5('abcd'), 'amen');
$tmpArr=easyEncrypt(0, md5('abcd'), $tmpArr);
 
sauberer wäre das allerdings mit static
Aber nur, wenn man die Daten in der gleichen Datei ver- und entschlüsseln will, was einen sehr komischen und unnützen Usecase darstellt. Üblicherweise sind Ver- und Entschlüsselung Operationen, die zu unterschiedlichen Zeitpunkten stattfinden. Da hilft kein static, da muss man den IV irgendwo persistent halten.
 
Ja, ich habe das ganze ausgelagert in eine Klasse. Der IV wird zudem noch ausserhalb als statische Variable pro Kunde gespeichert. Zusätzlich werden die verschlüsselten Daten und der Vector einmal täglich mittels eines cronjob gelöscht und neu erstellt.
Ich denke so ist es eine einigermaßen brauchbare Lösung. Zudem sind die verschlüsselten Daten nicht wirklich sicherheitsrelevant, sondern es handelt sich hierbei um Datenbankausgaben. Die sollten aus Gründen des Datenschutzes nicht unbedingt in fremde Hände fallen. Die Verschlüsselung ist dabei nur ein weiteres Sicherheitsfeature was den Zugriff erschweren soll.

Danke für die wie immer schnelle und kompetente Hilfe :)
 
Zurück
Oben