Frage

Ich versuche, die Verschlüsselung und Entschlüsselung (Rijndael 256, ECB-Modus) in zwei verschiedenen Komponenten auszuführen:
1. PHP - Server Side (mit mcrypt)
2. C + + - Client-Seite (mit gcrypt)

ich in ein Problem lief, wenn die Client-Seite nicht korrekt die verschlüsselten Daten entschlüsseln kann (von der Server-Seite gemacht)
so ... Ich habe die:
1. Anfangsvektor - same same (32 Länge)
2. der Schlüssel - wieder die gleiche Taste auf beiden Seiten ..

, so dass ich einige Code in C ++ geschrieben, dass die Daten verschlüsselt werden (mit den gleichen Parametern wie in der php)
und ich fand heraus, dass die verschlüsselten Daten unterschiedliche Bytes (vielleicht kodieren Problem ??) enthält

Ich werde mehr als froh sein, etwas Hilfe

PHP - MCrypt


// Encrypt Function
function mc_encrypt($encrypt, $mc_key) {
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $iv = "static_init_vector_static_init_v";
    echo "IV-Size: " . $iv_size . "\n";
    echo "IV: " . $iv . "\n";
    $passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $mc_key, $encrypt, MCRYPT_MODE_ECB, $iv);
    print_hex($passcrypt);
    return $encode;
}

mc_encrypt("Some text which should be encrypted...","keykeykeykeykeykeykeykeykeykeyke");

Ich werde nach dem C ++ Code in einem Kommentar

Danke, Johnny Depp

War es hilfreich?

Lösung

OK.

: Ich werde meinen Kommentar einer Antwort machen

Ein Initialisierungsvektor (IV) nicht im ECB-Modus verwendet. Wenn es verschiedene Implementierungen funktionieren könnte anders vorgesehen ist.

Wenn Sie sicher, dass die Implementierungen sein wollen arbeiten dann korrekt eine IV von 0 (Null) verwenden. Auch wenn Sie die IV liefern, sollten beide Implementierungen es ignorieren, aber man kann nie sicher sein, dass. Nicht eine IV im ECB-Modus bieten sollte als gut funktionieren, aber wieder, es hängt alles von den Implementierungen.

Nach der PHP Dokumentation MCrypt wird ignoriere es. Gcrypt Ich bin mir nicht sicher.

mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB) sollte eigentlich 0 zurück, da Sie ECB-Modus angeben.

Edit:

nennt mcrypt_get_iv_size oder mcrypt_create_iv nicht.
Statt mcrypt_encrypt aufrufen, ohne eine IV. Nach dem PHP Dokumentation alle Bytes in den IV werden auf '\ 0'.

Das Gleiche gilt für die C ++ Code. Keine Notwendigkeit zu setzen jede IV überhaupt. Der libgcrypt Code ist komplex, aber an der Quelle der Version 1.4.5 dann im ECB-Modus von einem Blick scheint es, die IV nicht verwendet wird.

Wenn der resultierende verschlüsselte Text unterscheidet sich dann noch das Problem ist etwas anderes.
Ein paar Möglichkeiten in den Sinn kommt:

  • Encoding - Ist die gleiche Codierung sowohl auf dem Server und dem Client verwendet
  • Endianness - Welche Art von Systemen sind der Server und der Client? Big- vs Little-Endian?
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top