mcrypt und iv?

wachteldonk

Erfahrenes Mitglied
Hallo,

ich habe mal eine generelle Frage. Ich codiere mit mcrypt Daten, senden Sie an einen anderen server und verschlüssel dies emit dem gleichen "iv" , den ich vom Ursprungsserver habe und sende die Daten zurück. Das Ergebnis ist aber recht "merkwürdig"

Es sieht so aus

??!;f??1??/??$???m?DI7?a=S??? O122","TICKETID2":"234234234"}

vor dem decrypten sieht es so aus

???\!????q?z??bz?Uw??\???fF??#???N???P??G?7u?(6

Irgendwie scheint er nur einen Teil zu entcrypten:( Die übergebenen Daten sind im json Format. ODe rmuss ich auf dem entfernten Server erneut ein iv erzeugen? Laut Doku denke ich nicht, aber was könnte sonst falsch sein?
 
Zuletzt bearbeitet:
Hallo,

habe jetzt die urlencode durch base64_encode und base64_decode ersetzt. Jetzt tritt das Problem mit den 32 Trashzeichen nicht mehr auf, aber jetzt ist das Ergebnis instabil. Manchmal gibt er garnix zurück, obwohl die Rückgabe gleich geblieben ist. Woran kann das jetzt liegen?

Sorry, geht doch noch nicht richtig. Allerdings scheint er die ersten 32 Zeichen jetzt nur manchmal nicht zu verstehen und gibt dann nach dem umwandeln ein leeres array zurück bzw. das eigentliche Datenpaket ist manchmal ok, aber manchmal auch teilweise Müll, wie oben bereits beschrieben
 
Zuletzt bearbeitet:
Hallo,

ich mach das mit CURL und Post. Ich haeb jetzt festgesellt das z.B. die "+" Zeichen verloren gehen
so sieht der String vor dem Absenden aus


A1maxrZqr/fWzLR24X6DuCVofKekyvaUoXmmp8kFO1viOxunaL6yFLYH1z4lLDcW5VItbJRqlIG1BfpDpskTKReqYq84W/+LeM1Hq6YreV2wnSeRl12DURgKE8

Auf dem anderen Server kommt dann

A1maxrZqr/fWzLR24X6DuCVofKekyvaUoXmmp8kFO1viOxunaL6yFLYH1z4lLDcW5VItbJRqlIG1BfpDpskTKReqYq84W/ LeM1Hq6YreV2wnSeRl12DURgKE8

Er verliert diese Zeichen.

ich kodiere den String vorher mit

base64_encode

und entpacke ihn dann wieder mit

base64_decode

Danach fehlt das +:(

ICh habe mal was dazu gefunden, dass es eventuell an UTF8 liegt,d as Probleme mit base64_encode hat, aebr noch keien Lsung dazu gefunden. WIe kann ich dann am besten UTF data kodieren, das es sauebr ankommt?
 
Zuletzt bearbeitet:
Kannst du evtl mal den kompletten Code posten (Sendungs- und Empfangsscript)? Wenn es dir zu heikel ist, dann poste nur die Umwandlung und die Rückwandlung.

Desweiteren wäre es interessant, die Klasse crypter() zu haben. Denn das kommt vermutlich auch im andern Thread von dir vor?
 
also, das ist meine crypterklasse

class crypter {
public function __construct() {
}

public function encrypt($string,$key,$iv) {
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $string, MCRYPT_MODE_CFB, $iv);
return $encrypted;
}

public function decrypt($string,$key,$iv) {
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $string, MCRYPT_MODE_CFB, $iv);
return $decrypted;
}

public function getIV() {
// Gibt Probleme bei der Übertragung, md5 klappts
//$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CFB), MCRYPT_RAND);
srand();
$iv = md5(date("Y-m-d H:i:s")+microtime()+rand(1,999999999999999));
return $iv;
}

}
 
Zuletzt bearbeitet:
Das ist der Sender

public function send($vars, $data, $typ = "ssl", $host = "https://xxxx.xx", $port = "443", $path = "/connector/index.php", $ref = "") {
if(is_array($vars)) {
foreach($vars AS $key => $value) {
$poststring .= "&".$key."=".$value;
}
}

// Datenpaket hinzufügen
$data = json_encode($data);
$iv = crypter::getIV();
$data = crypter::encrypt($data, $this->key, $iv);
//echo base64_encode($data)."<br><br>";
$poststring .= "&iv=".base64_encode($iv);
$poststring .= "&data=".base64_encode($data);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $host.$path);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_FAILONERROR, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $poststring);
$d = curl_exec($ch);
curl_close($ch);
echo $host.$path.$poststring."<br><br>";
$d = base64_decode($d);
$d = crypter::decrypt($d, $this->key, $iv);
$d = json_decode($d,true);
return $d;
}
 
das ist der empfangscode. Das Script gibt dann daten zurück. Aktuell nur eine id und da da wohl keine Sonderzeichen vorkommen, kommen doe Daten auch sauber zurück, aber hier erstmal der entschlüsselungscode

PHP:
		$key  	= $this->getKey($_REQUEST["LIZENZID"]);
		$data	= $_REQUEST["data"];

		//$data   = addslashes($data);
		$data 	= base64_decode($data);
		$iv 	= base64_decode($_REQUEST["iv"]);
		$data 	= crypter::decrypt($data, $key, $iv);		
		$data = json_decode($data);
 
Zurück