Hi,
ich habe mir eine Klasse gebastelt, die einen String per mcrypt verschlüsselt und in einem Cookie ablegt.
Ich spiel gerade ein wenig mit mcrypt rum, hänge aber irgendwie in der Luft, da die Klasse mal funktioniert und mal wieder nicht...
Ich habe folgende Klasse "class.CookieAuth.php" geschrieben:
Testweise habe ich eine Datei index.php' angelegt, um die Funktion der Klasse mal zu testen:
Öffne ich die 'index.php' jetzt im Browser, wird keine Meldung ausgegeben. Lade die Seite aber mehrmals hintereinander neu, klappt die Validierung in unregelmäßigen Abständen nicht.
Dann bekomme ich "Validate fehlgeschlagen, User nicht berechtigt!" ausgegeben, was bedeutet, dass der in der 'index.php' übergebene '$challengekey' nicht mit dem entschlüsselten String übereinstimmt.
Wo habe ich einen Fehler in der Klasse? Hab irgendwie gerade einen Hänger und verstehe nicht, wieso es manchmal klappt und manchmal dann eben nicht?
Gruß
Oneside
ich habe mir eine Klasse gebastelt, die einen String per mcrypt verschlüsselt und in einem Cookie ablegt.
Ich spiel gerade ein wenig mit mcrypt rum, hänge aber irgendwie in der Luft, da die Klasse mal funktioniert und mal wieder nicht...
Ich habe folgende Klasse "class.CookieAuth.php" geschrieben:
PHP-Code:
class AuthCookie {
// Handle für mcrypt
private $td;
// Verschlüsselungscode
static $key = 'Testkey';
//mcrypt Informationen
static $cypher = MCRYPT_BLOWFISH;
static $mode = MCRYPT_MODE_CFB;
//Informationen zum Cookie
static $cookiename = 'AUTH';
public function __construct(){
$this->td = mcrypt_module_open(self::$cypher,'',self::$mode,'');
}
public function set($challengekey){
setcookie(self::$cookiename,$this->_encrypt($challengekey));
}
public function validate($challengekey){
if (!$_COOKIE[self::$cookiename] || $_COOKIE[self::$cookiename] == ""){
echo("Validate fehlgeschlagen, Cookiedaten nicht vorhanden!");
}
if ($this->_decrypt($_COOKIE[self::$cookiename]) != $challengekey){
echo("Validate fehlgeschlagen, User nicht berechtigt!");
}
}
private function _encrypt($plaintext){
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($this->td), MCRYPT_RAND);
mcrypt_generic_init($this->td, self::$key,$iv);
$crypttext = mcrypt_generic($this->td,$plaintext);
mcrypt_generic_deinit($this->td);
return $iv.$crypttext;
}
private function _decrypt($crypttext){
$ivsize = mcrypt_enc_get_iv_size($this->td);
$iv = substr($crypttext,0,$ivsize);
$crypttext = substr($crypttext,$ivsize);
mcrypt_generic_init($this->td,self::$key,$iv);
$plaintext = mdecrypt_generic($this->td,$crypttext);
mcrypt_generic_deinit($this->td);
return $plaintext;
}
function __destruct() {
mcrypt_module_close($this->td);
}
} //Class
Testweise habe ich eine Datei index.php' angelegt, um die Funktion der Klasse mal zu testen:
PHP-Code:
require_once("class.CookieAuth.php");
//Ein zu verschlüsselnder Teststring
$challengekey = "XYZ";
//Neues Objekt anlegen
$obj_cookie = new AuthCookie();
//Teststring verschlüsseln und in Cookie speichern
$obj_cookie->set($challengekey);
// Objekt löschen
unset($obj_cookie);
//++++++++++++++++++++++++++++++++++++++
// Testvalidierung
//++++++++++++++++++++++++++++++++++++++
$obj_cookie = new AuthCookie();
//Entschlüsseln und vergleichen
$obj_cookie->validate($challengekey);
unset($obj_cookie);
Dann bekomme ich "Validate fehlgeschlagen, User nicht berechtigt!" ausgegeben, was bedeutet, dass der in der 'index.php' übergebene '$challengekey' nicht mit dem entschlüsselten String übereinstimmt.
Wo habe ich einen Fehler in der Klasse? Hab irgendwie gerade einen Hänger und verstehe nicht, wieso es manchmal klappt und manchmal dann eben nicht?
Gruß
Oneside
Kommentar