AES Verschlüsselung
-
Hallo!
Ich hab mal eine Frage. Ich probiere einwenig mit der AES-Verschlüsslung rum. Hab auch schon ein super Beispiel dazu gefunden und dieses einwenig abgeändert. Ich habe versucht das Beispiel so zu verändern, dass es ein Textfile auf der Platte öffnet, Verschlüsselt und dann wieder im Klartext darstellt. Leider gelingt mir das noch nicht wirklich, da immer nur ein Teil des Inhaltes im Textfile verschlüsselt wird. Evtl. kann mir ja jemand ein paar Tips geben, wie ich das umsetzen könnte. Das Problem wird bestimmt an der Blocklänge liegen ich hab da aber ehrlich gesagt noch nicht ganz durchgeblickt wie man das dann variable verändern kann. Die Textdatei soll ja variable sein.
char szHex[33]; //One block testing CRijndael oRijndael; oRijndael.MakeKey("abcdefghabcdefgh", "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16, 16); //oRijndael.MakeKey( //READ FILE char temp1[1]; FILE* handle; CString fileName= "c:\\textfile.log"; CString fileContent; handle=fopen(fileName,"rb"); //READ im BINARY Modus for FEATURE-USE if (0!=handle) { while((fread(temp1,1,1,handle))!=NULL) { fileContent+=temp1[0]; } fclose(handle); } //ENDE READ FILE //CSTRING 2 CHAR char* szDataIn = fileContent.GetBuffer(); cout << "szDataIn: " << szDataIn << endl; //DataOut = dataIn aber LEER char* szDataOut = fileContent.GetBuffer(); memset(szDataOut, 0, sizeof(fileContent)); cout << "szDataOut: " << szDataOut << endl; //Encryption oRijndael.Encrypt(szDataIn, szDataOut, 32, CRijndael::ECB); //48 / 64 immer multi von 16 cout << "szDataOut Encrypted: " << szDataOut << endl; //Encryptet DataOut als Hex ausgeben CharStr2HexStr((unsigned char*)szDataOut, szHex, 16); cout << "szDataOut Encrypted (HEX): " << szHex << endl; //DataIn löschen memset(szDataIn, 0, sizeof(fileContent)); //Decryption oRijndael.Decrypt(szDataOut, szDataIn, 32, CRijndael::ECB); cout << "szDataIn: " << szDataIn << endl;Danke!
Gruß
KMB
-
Klar, du kannst deine Datei natürlich nicht in einem einzigen Durchgang verschlüsseln. Bei AES z.B. musst du sie in 16 Byte-Blöcke unterteilen.
-
Erstmal Danke für Antwort.
Das heißt also ich muss eine Schleife erstellen die jeweils 16 Byte-Blöcke verschlüsselt. Die Datei wird ja nicht exakt auf 16'ner aufteilbar sein, was passiert denn mit den übrigen BYtes? Muss ich dann noch NUlBytes oder so ranhängen?
Gruß
KMB
-
Müssen nicht Nullbytes sein, aber du musst irgendwas anhängen um auf 16 Byte zu kommen.
Weiters solltest du dir wahrscheinlich dashier durchlesen, da die Verschlüsselung "einfach so" (ECB) nicht unbedingt sehr sicher ist: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
-
Super Tip hustbaer. Danke! ich werde mal Sehen ob ich nicht nen anderen Standart dann nutze.
Gruß
KMB
-
Wie, anderen Standard? AES ist schon gut, bloss musst du nen anderen "block cipher mode" verwenden, z.B. "cipher block chaining".
Zusätzlich kannst du noch vorne eine Anzahl Zufalls-Bytes dranhängen und diese dann mitverschlüsseln, dann sehen die selben verschlüsselten Daten nicht immer gleich aus. Natürlich musst du diese Zufalls-Bytes nach dem entschlüsseln dann überspringen, sollte logisch sein

Wenn du ganz paranoid bist^^ kannst du die Anzahl der vorangestellten Zufalls-Bytes auch noch zufällig bestimmen, und z.B. ganz hinten an die Daten anhängen (damit du nach dem decodieren weisst wie viele du überspringen musst). Dadurch kann man dann nichtmal mehr die genaue Länge der Originaldaten aus den codierten Daten "erraten" ohne den Schlüssel zu kennen.