Text Datei verschlüsseln



  • proggingmania schrieb:

    Und hier eine XOR 8 Bit Verschlüsselung.

    Kannst du das auch mit 128 Bit ?



  • pale dog schrieb:

    *#define decode encode
    *oder umgekehrt 😉

    Ja, oder nur einen Funktionsnamen für beide Richtungen nehmen. 🙂

    128 Bit schrieb:

    Kannst du das auch mit 128 Bit ?

    Jo

    // pssssssscht nicht gucken !
    unsigned char _128BitKey[16] = {
    									0xE9, 0xA4, 0xDE, 0x12,
    									0xC8, 0xFF, 0x3B, 0xBB,
    									0x8C, 0x2D, 0x33, 0xEF,
    									0x3D, 0x88, 0x77, 0x2F
    								};
    void EncDec128( char* s )
    {
    	char i = 0;
    	while(*s)
    	{
    		*s++ ^= _128BitKey[i++];
    		if ( i == 15 ) i = 0;
    	}
    }
    
    int main()
    {
     	char str[] = "This text will be encoded and decoded by a simple "
    				 "128 bit key XOR algorithm :-D";
    
    	printf("Origin: \n%s\n\n", str ); 
    	EncDec128(str);
    
    	printf("Encoded: \n");
    	printf("%s\n\n", str );
    
    	EncDec128(str);
    	printf("Decoded:\n%s\n\n", str );
    	return 0;
    }
     :)
    


  • schreib' doch mal einen decoder dafür:

    void encode (char *s)
    {
       if (!*s)
          return;
       
       *s++ ^= 0x55;
       
       for (;*s;s++)
          *s ^= *(s-1);
    }
    

    hat keiner 'ne idee, oder ist euch das zu trivial?



  • pale dog schrieb:

    schreib' doch mal einen decoder dafür:

    void encode (char *s)
    {
       if (!*s)
          return;
       
       *s++ ^= 0x55;
       
       for (;*s;s++)
          *s ^= *(s-1);
    }
    

    hat keiner 'ne idee, oder ist euch das zu trivial?

    Definitiv zu trivial! 😉



  • #include <stdio.h>
    
    void encode (char *s)
    {
       if (!*s) return;
       *s++ ^= 0x55;
       for (;*s;s++)  *s ^= *(s-1);
    }
    
    void decode ( char* s, int sz )
    {
    	int i; char buf[256];
    
    	for ( i = 1; i<sz; i++ )
    	{
    		buf[i] = s[i]^s[i-1];
    	}
    	buf[i-1] = '\0';
    	buf[0] = s[0]^0x55;
    	strcpy( s, buf );
    }
    
    int main()
    {
     	char str[] = "pAlE DoGs aLgOrItHm hAcKeD bY PrOgGiNgMaNiA.";
    
    	printf("Origin: \n%s\n\n", str );
    
    	encode(str);
    	printf("Encoded: \n%s\n\n", str );
    
    	decode(str, sizeof(str) );
    	printf("Decoded: \n%s\n\n", str );
    
    	return 0;
    }
    

    🙂



  • #include <stdio.h>
    
    void encode(char *s){
      int count = 0;
      if(!*s)
        return;
    
      *s++ ^= 0x55;
      count++;
    
      while(*s){
        ++count;
      *s++ ^= *(s-1);
      }
    }
    
    void decode(char *s){
      char prevChar;
      char temp;
    
      if(!*s)
        return;
    
      prevChar = *s;
      *s++ ^= 0x55;
    
      while(*s){
        temp = *s;
        *s++ ^= prevChar;
        prevChar = temp;
      }
    }
    
    int main(){
      char str[] = "pAlE DoGs aLgOrItHm hAcKeD bY _Gast_.";
    
      encode(str);
      printf("Encoded: %s\n",str);
      decode(str);
      printf("Decoded: %s\n",str);
    
      return 0;
    }
    

    😉



  • mal ganz dumm gefragt, was bedeutet ?

    *s++ ^= 0x55;

    xD

    pointer aufs aktuelle zeichen, mit ++ nach der operation erhöhen, und ... ja was ist denn ^= ?? 😕

    ahhh xor...



  • Gast schrieb:

    ...
    char str[] = "pAlE DoGs aLgOrItHm hAcKeD bY _Gast_.";
    ...
    😉

    😃



  • ja, wir haben 2 gewinner! 👍 war doch nicht so schwer.
    einer von euch darf jetzt die nächste rätselaufgabe stellen.
    btw: sorry, moderators, ich weiss, sowas ist thread-hijacking, also bitte abtrennen wenn's sein muss. 🙂



  • pale dog schrieb:

    einer von euch darf jetzt die nächste rätselaufgabe stellen.

    Nagut, weil du es bist. 🙂

    void encode( unsigned char* p )
    {
    	while(*p++) 1 & *p ? *p >>= 1, *p |= 0x80:(*p >>= 1); 
    }
    void decode( unsigned char* p )
    {
    	// not written yet
    }
    #include <stdio.h>
    int main()
    {
    	unsigned char text[] = "Hallo Echo !";
    	encode( text );	 
    	printf("Encoded: \n%s\n\n", text );
    
    	decode(text);
    	printf("Decoded: \n%s\n\n", text );
    	return 0;
    }
    

    🙂



  • lächerlich...

    void decode (unsigned char *p)
    {
        while (*p++) 
            *p = (*p<<1) | (*p >>7);
    }
    

    😉



  • Hab mir mal einen anderen Weg einfallen lassen...

    char rol(unsigned char p){
      char ret;
        asm(
    	"mov %1, %%al;"
    	"rol $1, %%al;"
    	"mov %%al, %0;"
    	:"=r"(ret)
    	:"r"(p)
    	:"%eax"
    	);
      return ret;
    }
    
    void decode( unsigned char* p )
    {
      while(*p++){
        *p = rol(*p);
      }
    }
    

    😮



  • 👍 Sieht beides ganz gut aus 👍



  • Bei mir werden nach dem entschlüsseln alle lehrzeichen gelöscht


Anmelden zum Antworten