AES Encryption funktioniert nicht nach plan



  • Hallo Community ! 🙂

    Ich habe hier ein Problem mit meiner AES Encryption. Ich encrypte mein file irgendwie falsch.

    Ich denke ich mache die ganze Zeit einen Denk Fehler^^

    Hier mein code:

    #pragma once
    
    #include <fstream>
    #include <iostream>
    #include <windows.h>
    
    #include "Rijndael.h"
    
    #define WIN32_LEAN_AND_MEAN	
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	CRijndael Rij;
    
    	char DecryptStr[16] = {0};
    	char DecryptedStr[20] = {0};
    	char filestr[999999] = {0};
    	Rij.MakeKey("123456789",CRijndael::sm_chain0, 16,16);
    
    	FILE *filein;
    	filein = fopen(argv[1],"rb");
    
    	fseek(filein,0,SEEK_END);
    
    	int size = ftell(filein);
    	rewind (filein);
    	fseek(filein,0,SEEK_SET);
    	char *bufin = (char*)malloc(sizeof(char)*size+1);
    	memset(bufin,0,sizeof(char)*size);
    	fread(bufin,1,size,filein);
    
    	FILE *fileout;
    	char outputname[999] = {0};
    	sprintf(outputname,"%s.set",argv[1]);
    	fileout = fopen(outputname,"w");
    
    	char miep[999999] = {0};
    	for(int i = 0;i < (size);i+=16)
    	{
    
    		Rij.Encrypt(bufin+i, filestr,16);
    		//fwrite(filestr,1,16,fileout);
    		//strcat(miep,filestr);
    
    	}
    
    	for(int i = 0; i < size+1; i++){
    		//miep[i+1] = miep[i];
    
    		strncpy(DecryptStr, bufin, 16);
    		Rij.EncryptBlock(DecryptStr, DecryptedStr);
    		strcat(filestr, DecryptedStr);
    
    	}
    
    	//miep[0] = 0x0b;
    	//fwrite(miep,1,(size+1),fileout);
    
    	fwrite(filestr, 1, 16, fileout);
    
    	fclose(filein);
    	fclose(fileout);
    	free(bufin);
    	cout << "Done !";
    	cin.get();
    	return 0;
    }
    

    Das decrypten ist leicht, das es ein simpler ansatz in der for-Schleife ist.

    for(int i = 0;i < size;i+=16)
    	{
    		Rij.Decrypt(bufin+i, filestr,16);
    		fwrite(filestr,1,16,fileout);
    	}
    

    Hoffe um hilfe und/oder Rat und Tat 😛 🙂


  • Mod

    harCs+ schrieb:

    Hoffe um hilfe und/oder Rat und Tat 😛 🙂

    1. Ersten Link in meiner Signatur lesen. Niemand kann wissen, was überhaupt dein Problem ist, bei Beschreibungen wie "irgendwie falsch".
    2. Für eine Sprache entscheiden. Dein Code enthält 4 Zeilen C++, ohne die würde ich das ohne zögern nach C schieben. Mischen von C und C++ ist eine sehr häufige Fehlerursache, da die Standardbibliotheken ziemlich inkompatibel sind.



  • Hallo, danke für die Antwort erstmal 🙂

    Also, ich habe meine verschlüsselte Datei, sie ist 2,59KB groß. Wenn ich sie entschlüssele, sehe ich den vollen Code etc.
    Wenn ich diese entschlüsselte Datei wieder verschlüssele(encrypte), ist diese nur 16 Byte groß + wenn ich die 2 Verschlüsselten Datein überprüfe, sind diese unterschiedlich.


  • Mod

    #include <windows.h>
    
    ...
    
    #define WIN32_LEAN_AND_MEAN
    

    Das scheint mir recht sinnlos zu sein.



  • @camper
    Ist es auch 🙂



  • harCs+ schrieb:

    Wenn ich diese entschlüsselte Datei wieder verschlüssele(encrypte), ist diese nur 16 Byte groß + wenn ich die 2 Verschlüsselten Datein überprüfe, sind diese unterschiedlich.

    Was soll das denn mit dem ganzen auskommentierten Code da? Bitte nimm dir Sepps Ratschlag mal zu Herzen. So kann man dir jedenfalls nicht helfen.

    Wenn ich jetzt auf den ersten Blick nichts übersehen hab, sind 16 geschriebene Bytes nach fileout doch genau richtig für den geposteten Code. Also bitte dein Problem genauer beschreiben.



  • camper schrieb:

    #include <windows.h>
    
    ...
    
    #define WIN32_LEAN_AND_MEAN
    

    Das scheint mir recht sinnlos zu sein.

    Déjà-vu! 😉



  • Horst Hansen schrieb:

    Was soll das denn mit dem ganzen auskommentierten Code da?

    Sind Sachen die ich versucht habe. Sind auskommentiert und nicht gelöscht weil ihr vielleicht auch daraus was schließen könnt, weil wie ich schon sage, ich sicher einen unbewussten Denk-Fehler mache.

    Horst Hansen schrieb:

    Wenn ich jetzt auf den ersten Blick nichts übersehen hab, sind 16 geschriebene Bytes nach fileout doch genau richtig für den geposteten Code. Also bitte dein Problem genauer beschreiben.

    Ich erklär es mal so:
    Meine verschlüsselte Datei sieht so aus(nur erste Zeile, will ned das ganze posten):

    (H¹ôsMë7ÙÀç{ª¾£§xÀMy•½FÞšºG.£§xÀMy•½FÞšºG.£§xÀMy•½FÞšºG.£§xÀMy•½FÞšºG.£§xÀMy•½FÞšºG. ¬ºoʤýyšŠÍa6ƒ¸üôŤ_9aÎã—à#÷Ù1P^“›õÁƒ-G§/Z]B¦w€¼^›£k/ÜZº*aÚóÝ¢è>q.#Ë<^‚èú@Ãù°JÞΔÃ`.ú^">YéÿcÅ^ÎÁf+Ð…O1ˆÓ—uµÓš¯; kÍ|ɔĭL@ÊJLš(ìÕfÅDôE€W/˜–ó~M„ä
    

    Wenn ich die Datei entschlüssele und wieder verschlüssele sieht das dann so aus(die ganze Datei !):

    Fc±$n1½Öê6
    

    Ist also was falsch.

    Oder ein besserer Test:
    so sieht das entschlüsselte aus(nur paar code zeilen):

    ;---------------------------------------------------------------------------------------------------------
    
    [Default]
    
    ;º¸½ºÀü¿¡ »ç¿ëµÉ ÄÚÆ® °³¼ö(±âº»ÀûÀ¸·Î ARENAÄÚÆ® ºÎÅÍ »ç¿ëµÈ´Ù.)
    
    ;ARENA
    
    [BOSS_COURT_1] 
    
    	BossCourtIdx = 6;
    
    	// ½ºÅ³¹ßµ¿ ½Ã°£(ÃÖ¼Ò~ÃÖ´ë»çÀÌ¿¡ ·£´ýÇÏ°Ô ¹ß»ý)
    
    	Min_SkillTime=15;
    
    	Max_SkillTime=30;
    

    Wenn ich die Datei wieder verschlüssele und als test das Verschlüsselte entschlüssele sieht das so aus:

    T”*·éãÐ 'òÅ<æA¬Ž½ tÒøÛ’Ó[ZàBn
    

    Ich hoffe ihr könnt mir jetzt besser folgen^^
    Das entschlüsseln funktioniert prima(wie schon im main post erwähnt) aber das verschlüsseln nicht.

    Irgendetwas ist falsch an meinem Verschlüsselungs-Algorithmus.

    char miep[999999] = {0};
        for(int i = 0;i < (size);i+=16)
        {
    
            Rij.Encrypt(bufin+i, filestr,16);
            //fwrite(filestr,1,16,fileout);
            //strcat(miep,filestr);
    
        }
    
        for(int i = 0; i < size+1; i++){
            //miep[i+1] = miep[i];
    
            strncpy(DecryptStr, bufin, 16);
            Rij.EncryptBlock(DecryptStr, DecryptedStr);
            strcat(filestr, DecryptedStr);
    
        }
    
        //miep[0] = 0x0b;
        //fwrite(miep,1,(size+1),fileout);
    
        fwrite(filestr, 1, 16, fileout);
    

    Wie gesagt das auskommentierte ist, das was ich noch versucht hatte bevor ich hier nachgefragt hab.



  • vielleicht soltlest du mehr als 16 Bytes in die Datei schreiben. dann wäre deine datei auch mehr als 16 Bytes groß. (Zeile 24 in deinem zuletzt geposteten Code).



  • otze schrieb:

    vielleicht soltlest du mehr als 16 Bytes in die Datei schreiben. dann wäre deine datei auch mehr als 16 Bytes groß. (Zeile 24 in deinem zuletzt geposteten Code).

    er encryptet trotzdem falsch ^^

    Ich gehe sicher in der for-Schleife falsch vor aber sehe den Fehler nicht 😞



  • da kann ich dir nicht helfen. Ich kann nur C++, mit C string frickeleien gebe ich mich nicht ab.



  • Du kannst doch verschlüsselte Daten nicht mit strxxx Funktionen rumkopieren - schliesslich können verschlüsselte Daten auch mal Nullbytes enthalten.


Anmelden zum Antworten