Text Datei verschlüsseln



  • Ich mochte das der Benuter einen Text eingibt , jeder einzelne Buchstabe soll dann durch den nächsten ersetzt werden als A durch B ... Der kodierte Text wird dann in einer Datei gespeichert

    Aber wie löse ich dies?

    danke im schon mal



  • Wo genau hapert es denn?



  • Ich weiß gar nicht wie ich des machen kann!
    Hab erst angefangen zu Programmieren



  • void encode( char* s )
    {
    	while(*s)
    	{
    		if (!isalpha(*s) ) continue;
    
    		if ( *s == 'z' )
    		{
    			*s = 'a';
    			continue;
    		}
    		if ( *s == 'Z' )
    		{
    			*s = 'A';
    			continue;
    		}
    		*s = *s + 1;
    		s++;
    	}
    }
    
    void decode( char *s )
    {
    	while(*s)
    	{
    		if (!isalpha(*s) ) continue;
    
    		if ( *s == 'a' )
    		{
    			*s = 'z';
    			continue;
    		}
    
    		if ( *s == 'A' )
    		{
    			*s = 'Z';
    			continue;
    		}
    
    		*s = *s - 1;
    		s++;
    	}
    }
    
    int main()
    {
    	char str[] = "AaBbCc";
    
    	encode(str);
    	printf("Encoded: %s\n", str );
    
    	decode(str);
    	printf("Decoded: %s\n", str );
    	return 0;
    }
    


  • Da waren noch ein paar Unzulänglichkeiten 😃

    void encode( char* s )
    {
    	while(*s)
    	{
    		if (!isalpha(*s) ) continue;
    
    		if ( *s == 'z' )
    		{
    			*s = 'a';
    			s++;
    			continue;
    		}
    		if ( *s == 'Z' )
    		{
    			*s = 'A';
    			s++;
    			continue;
    		}
    		*s = *s + 1;
    		s++;
    	}
    }
    
    void decode( char *s )
    {
    	while(*s)
    	{
    		if (!isalpha(*s) ) continue;
    
    		if ( *s == 'a' )
    		{
    			*s = 'z';
    			s++;
    			continue;
    		}
    
    		if ( *s == 'A' )
    		{
    			*s = 'Z';
    			s++;
    			continue;
    		}
    
    		*s = *s - 1;
    		s++;
    	}
    }
    
    int main()
    {
    	char str[] = "AaBbCcZz";
    
    	printf("Origin: %s\n", str );
    
    	encode(str);
    	printf("Encoded: %s\n", str );
    
    	decode(str);
    	printf("Decoded: %s\n", str );
    	return 0;
    }
    


  • char *enc(char *src){
        int lo, hi, diff;
        char *str = src;
        while(*str){
            lo   = ((*str >= 'a') && (*str <= 'z'));
            hi   = ((*str >= 'A') && (*str <= 'Z'));
            diff = *str * lo - 'a' * lo + *str * hi - 'A' * hi;
            *str += (diff + lo)%26 - diff;
            *str += (diff + hi)%26 - diff;
            str++;
        }
        return src;
    }
    

    Ist vielleicht verständlicher *scnr* 😃



  • Tim schrieb:

    char *enc(char *src){
        int lo, hi, diff;
        char *str = src;
        while(*str){
            lo   = ((*str >= 'a') && (*str <= 'z'));
            hi   = ((*str >= 'A') && (*str <= 'Z'));
            diff = *str * lo - 'a' * lo + *str * hi - 'A' * hi;
            *str += (diff + lo)%26 - diff;
            *str += (diff + hi)%26 - diff;
            str++;
        }
        return src;
    }
    

    Ist vielleicht verständlicher *scnr* 😃

    void encode (char *s)
    {
        for(;*s;s++)
            if (isalpha(*s))
                *s = ((((*s & 0xdf) - 'A')+1)%26 + 'A') | (*s & 0x20);
    }
    

    vielleicht nicht ganz so verständlich 😉



  • Und hier eine XOR 8 Bit Verschlüsselung.

    char topSecretKey = 0xC5; // pssssssscht nicht gucken ! :-D
    
    void encode( char* s )
    {
    	while(*s) *s++ ^= topSecretKey;
    }
    
    void decode( char* s )
    {
    	while(*s) *s++ ^= topSecretKey;
    }
    
    int main()
    {
    	char str[] = "proggingmanias \"top secret\" 8 bit encoder/decoder :-D";
    
    	printf("Origin: %s\n", str );
    
    	encode(str);
    	printf("Encoded: %s\n", str );
    
    	decode(str);
    	printf("Decoded: %s\n", str );
    	return 0;
    }
    

    🙂 🙂 🙂



  • proggingmania schrieb:

    void decode( char* s )
    {
    	while(*s) *s++ ^= topSecretKey;
    }
    

    *#define decode encode
    *oder umgekehrt 😉



  • 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);
      }
    }
    

    😮


Anmelden zum Antworten