int füllen



  • Naja ok, ich Poste doch mal die Klasse hier rein.

    Vorab, das soll ein int crypt werden da ich es für mein programm brauche.
    Dwer int soll eine zahl bekommen, womit kein Mensch arbeiten kann bzw ändern kann, ohne zu wissen was das wirklich für eine Zhal ist.
    Da die zahlen in einer datei stehen die man öffnen kann, sollen die alle einen anderen wert bekommen, womit nur das programm arbeiten kann.

    PS Ich weiss das ist net gut, aber es reicht mir erstmal auch in die Sprache rein zu kommen, und sicher ist es auch nicht, also bitte kein flame 🙂

    //    CRYPT_H    //
    
    #ifndef CRYPT_H
    #define CRYPT_H
    
    #include <iostream>
    #include <string>
    #include <sstream>
    
    // Variabel zum Auslesen (while schleife)
    int k = 0;
    
    // Zähler
    int z = 0;
    
    // Index für Key (3Zahlen) Entschlüsseln
    int keyindex = 2;
    
    // Schalter für AN/AUS
    bool cryptS = true;
    unsigned int keyzahl[2];
    
    #define C0 126
    #define C1 405
    #define C2 381
    #define C3 953
    #define C4 735
    #define C5 628
    #define C6 794
    #define C7 761
    #define C8 638
    #define C9 483
    
    class crypt
    {
    private:
    	// Variabeln
    	unsigned int schlüssel[50];
    	// unsigned int keyzahl[50];
    
    	// Ergebnis Übergabe INT (Entschlüsselt)
    	unsigned int ergebnis;
    
    	// Zerlegter Key (3)
    	int key3[3];
    
    	struct codeint
    	{
    		int code0;
    		int code1;
    		int code2;
    		int code3;
    		int code4;
    		int code5;
    		int code6;
    		int code7;
    		int code8;
    		int code9;
    	};
    
    public:
    
    	// INSTACE (INT)
    	codeint CODEINT;
    
    	// Erzeuge Code INT
    	void erzeugecode ()
    	{
    		CODEINT.code0 = 94;
    		CODEINT.code1 = 63;
    		CODEINT.code2 = 72;
    		CODEINT.code3 = 41;
    		CODEINT.code4 = 21;
    		CODEINT.code5 = 11;
    		CODEINT.code6 = 35;
    		CODEINT.code7 = 85;
    		CODEINT.code8 = 56;
    		CODEINT.code9 = 88;
    	}
    
    	// Prüfe auf INT
    	bool pvorhanden (int txt)
    	{
    		if (txt >= 0)
    		{
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    
    	// Auslesen
    	void ausleseint (int zahl)
    	{
    		int temp;
    		while(zahl)
    		{ 
    			temp = zahl%10;
    			zahl/=10;
    			speicherint (temp);
    		}
    		cryptS = false;
    	}
    
    	// Verschlüssel INT
    	void verschlüsselint (int txt)
    	{
    		// Übergabe zu Schlüssel
    		int u = NULL;
    
    		k++;
    		while (k == 1)
    		{
    			ausleseint (txt);
    		}
    
    		if (pvorhanden(txt) == true && cryptS == true)
    		{
    			if (txt == 0)
    			{
    				u = CODEINT.code0;
    				schlüssel[z] = u + C0;
    				std::cout << schlüssel[z];
    			}else if (txt == 1)
    			{
    				u = CODEINT.code1;
    				schlüssel[z] = u + C1;
    				std::cout << schlüssel[z];
    			}else if (txt == 2)
    			{
    				u = CODEINT.code2;
    				schlüssel[z] = u + C2;
    				std::cout << schlüssel[z];
    			}else if (txt == 3)
    			{
    				u = CODEINT.code3;
    				schlüssel[z] = u + C3;
    				std::cout << schlüssel[z];
    			}else if (txt == 4)
    			{
    				u = CODEINT.code4;
    				schlüssel[z] = u + C4;
    				std::cout << schlüssel[z];
    			}else if (txt == 5)
    			{
    				u = CODEINT.code5;
    				schlüssel[z] = u + C5;
    				std::cout << schlüssel[z];
    			}else if (txt == 6)
    			{
    				u = CODEINT.code6;
    				schlüssel[z] = u + C6;
    				std::cout << schlüssel[z];
    			}else if (txt == 7)
    			{
    				u = CODEINT.code7;
    				schlüssel[z] = u + C7;
    				std::cout << schlüssel[z];
    			}else if (txt == 8)
    			{
    				u = CODEINT.code8;
    				schlüssel[z] = u + C8;
    				std::cout << schlüssel[z];
    			}else if (txt == 9)
    			{
    				u = CODEINT.code9;
    				schlüssel[z] = u + C9;
    				std::cout << schlüssel[z];
    			}
    		}
    		z++;
    	}
    
    	// Speicher Zerlegten INT - Verschlüssel
    	void speicherint (int txt)
    	{
    		int *ptr = new int;
    		*ptr = txt;
    		verschlüsselint (*ptr);
    		*ptr=0; 
    		delete ptr; 
    	}
    
    	// Speicher Zerlegten INT - Entschlüssel
    	void speicherschlüssel (int txt)
    	{
    		int *ptr = new int;
    		*ptr = txt;
    		key3[keyindex] = *ptr;
    		keyindex--;
    		if (keyindex == -1)
    		{
    			keyindex = 2;
    		}
    		*ptr=0; 
    		delete ptr;
    	}
    
    	// Entschlüssel INT
    	void entschlüsselint (unsigned int code)
    	{
    		// Index
    		int g = 0;
    
    		// Zähler für Zerlgen (Schleife)
    		int y = 0;
    
    		// Zerlege Code
    		while (code)
    		{
    			while (y<3)
    			{
    				int temp;
    				temp = code%10;
    				code/=10;
    				speicherschlüssel (temp);
    				y++;
    			}
    			y = 0;
    			if (key3[0] == 2 && key3[1] == 2 && key3[2] == 0)
    			{
    				keyzahl[g] = 0;
    				std::cout << keyzahl[g];
    				g++;
    			}else if (key3[0] == 4 && key3[1] == 6 && key3[2] == 8)
    			{
    				keyzahl[g] = 1;
    				std::cout << keyzahl[g];
    				g++;
    			}else if (key3[0] == 4 && key3[1] == 5 && key3[2] == 3)
    			{
    				keyzahl[g] = 2;
    				std::cout << keyzahl[g];
    				g++;
    			}else if (key3[0] == 9 && key3[1] == 9 && key3[2] == 4)
    			{
    				keyzahl[g] = 3;
    				std::cout << keyzahl[g];
    				g++;
    			}else if (key3[0] == 7 && key3[1] == 5 && key3[2] == 6)
    			{
    				keyzahl[g] = 4;
    				std::cout << keyzahl[g];
    				g++;
    			}else if (key3[0] == 6 && key3[1] == 3 && key3[2] == 9)
    			{
    				keyzahl[g] = 5;
    				std::cout << keyzahl[g];
    				g++;
    			}else if (key3[0] == 8 && key3[1] == 2 && key3[2] == 9)
    			{
    				keyzahl[g] = 6;
    				std::cout << keyzahl[g];
    				g++;
    			}else if (key3[0] == 8 && key3[1] == 4 && key3[2] == 6)
    			{
    				keyzahl[g] = 7;
    				std::cout << keyzahl[g];
    				g++;
    			}else if (key3[0] == 6 && key3[1] == 9 && key3[2] == 4)
    			{
    				keyzahl[g] = 8;
    				std::cout << keyzahl[g];
    				g++;
    			}else if (key3[0] == 5 && key3[1] == 7 && key3[2] == 1)
    			{
    				keyzahl[g] = 9;
    				std::cout << keyzahl[g];
    				g++;
    			}
    			else
    			{
    				system ("cls");
    				std::cout << "ERROR";
    			}
    		}
    
    		if (!code)
    		{
    			ergebniszahl ();
    		}
    	}
    
    	// Ergebnis der Entschlüsselung fertig in INT
    	int ergebniszahl ()
    	{
    		/*
    		unsigned int tt[] = {2,3,56};
    		 std::stringstream stream; 
     std::copy( std::begin(keyzahl), std::end(keyzahl), std::ostream_iterator<unsigned>(stream) ); 
    auto zahl = *std::istream_iterator<unsigned long>(stream);
    		return zahl;
    		*/
    	}
    
    	// Konstrukor
    	crypt ()
    	{
    		erzeugecode ();
    	}
    };
    
    // INSTANCE
    extern crypt CRYPT;
    
    #endif
    

  • Mod

    b4nan1 schrieb:

    Vorab, das soll ein int crypt werden da ich es für mein programm brauche.
    Dwer int soll eine zahl bekommen, womit kein Mensch arbeiten kann bzw ändern kann, ohne zu wissen was das wirklich für eine Zhal ist.
    Da die zahlen in einer datei stehen die man öffnen kann, sollen die alle einen anderen wert bekommen, womit nur das programm arbeiten kann.

    Das ist vergebene Mühe. Alles was dein Programm lokal macht, steht jedem zur Betrachtung offen, egal ob direkt in die Executable geschrieben oder erst zur Laufzeit berechnet.



  • Wie zu betracht? hier meinste?

    Werte werde ich dann natürlich abändern, oder wie meinste das?

    Ist klar das für Crack- Hack futzis das kein problem ist.

    ICH HABE AUCH NET LINUX GESCHRIEBEN 🙂


  • Mod

    b4nan1 schrieb:

    Ist klar das für Crack- Hack futzis das kein problem ist.

    Wieso dann überhaupt die Mühe? Wer dein Programm nicht hacken will, hackt dein Programm nicht. Wer dein Programm hacken will, hat kein Problem, egal was du machst.



  • @Sone: Dein Code rechnet in der Schleife nicht das richtige aus, weil du vorher die Eingabewerte zerschießt. http://ideone.com/sKpsP0

    Wenn ich das wie folgt behebe:

    unsigned long concatenateArr_Sone( unsigned* first, unsigned* last )
    {
        unsigned long value = 0,
                      ct = 1;
    
        while( last-- != first )
        {
          unsigned x = *last;
    
          while(x > 9)
          {
            value += ct * (x % 10);
            x /= 10;
            ct *= 10;
          }
    
          value += ct * x;
          ct *= 10;
        }
    
        return value;
    }
    

    dann sind die Codestücke bei mir mit -O3 etwa gleich schnell (23,9 zu 25,2 hat meiner die Nase vorn, aber das ist innerhalb der Messungenaugkeit). Mit -O2 ist das Verhältnis verdreht bei 31,5 zu 22,7.



  • Bloß wie könnte man das den lösen?

    int ergebniszahl ();
    

    Möchte ich die umwandlung haben ohne parameter, das ich einfach die funktion ein int zuweisen kann.

    Weil das Problem ist, wenn ich halt die größe angebe, das er denn die ganzen 0 auch kopeirt etc...

    bzw kann man nicht ein ganzes array mit geben bzw die geänderten values?

    PS: ICh weiss laut Mod.. das es sinnlose mühe ist, aber ich will net das in der .dat datei keine 2 steht, sonder z.b 220.
    Das ist nur der grund warum ich es mache, da ich selbst weiss das ich net unhackbare sachen schreiben kann, was ich auch net wil, und auch net kann 🙂


  • Mod

    mt19937 rng;
      int zweihundertzwanzig = 3499211832 - rng();
    

    😃



  • ahh das noch drann hängen ja?

    Ja ich versuche mal das mal heute abend noch, thx erstmal 🙂

    Supper Forum ja, das man net profi sein muss, um hier antworten zu bekommen finde ich sehr gut 🙂



  • weil ganz verstehe ich die - zahl net aber ok, ich versuche es mal nacher nochmal.

    Oder kann ich den array in eine zeile schreiben lassen in einer txt datei, und die vom int auslesen lassen?

    wäre ich glaube am einfachsten, weil es soweiso in fstream rein kommt das ganze bzw mit.


  • Mod

    Meine Lösung hat mit dem Arraygefrickel nichts zu tun. Es ist bloß eine halbwegs elegante Lösung für dein eigentliches Problem, eine Zahl möglichst unleserlich im Programm zu hinterlegen. Meine Lösung lässt sich durch den Compiler auch nur schwer bis gar nicht wegoptimieren, wohingegen viele der bisherigen Lösungen in der fertigen Executable wohl direkt dastehen, weil der Compiler die Rechnung zur Compilezeit durchführen kann.



  • ahh ok 🙂

    Ja ich verstehe den code zwar trd nicht aber ok.
    Vieleicht soll das ein anzeichen auf deine lösung sein xD

    Also ich bin jetzt nicht der gute in der sache da, wie der Compiler was wie bearbeitet etc.. ok, habe Informatik nicht gemacht xD

    Ich gehe an der sache logisch ran, daher auch vil mein aufwand, meine gedanken mit c++ umzusetzen, ich weiss es gibt klassen, da reicht eine zeile, und das war, aber damit kenen ich mich auch net aus, wie z.b wincrypt, XOR etc...

    Und zu mein Array Problem, ich habe eine lösung gefunden, die ich auch Mathematisch löse, ohne auslesen oder kopieren.


Anmelden zum Antworten