#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void caesar( const char *src, char *dst ) {
  int i;
  for( i = 0; src[i] != '\0'; ++i ) {
    if( src[i] >= 'a' && src[i] <= 'z' ) {
      dst[i] = 'a' + ( src[i]-'a' + i + 1 ) % 26;
    }
    else if( src[i] >= 'A' && src[i] <= 'Z' ) {
      dst[i] = 'A' + ( src[i]-'A' + i + 1 ) % 26;
    }
    else {
      fprintf( stderr, "err\n" );
    }
  }
  dst[i]='\0';
}

void raseac( const char *src, char *dst ) {
  int i;
  int l = strlen(src);
  char *work = malloc( l );

  dst[l] = '\0';
  while(1) {
    for( i = 0; i < l; ++i ) {
      int c = rand( ) % 52;
      dst[i] = ( c < 26 )? ('a'+c): ('A'+c-26 );
    }
    caesar( dst, work );
    if( strcmp( work, src ) == 0 ) {
      free(work);
      return;
    }
  }
}

int main(){
  char src[] = "text";
  char encripted[sizeof(src)];
  char decripted[sizeof(src)];

  caesar( src, encripted );
  raseac( encripted, decripted );

  printf( "src=%s, encripted=%s, decripted=%s\n", src, encripted, decripted );
};