el codigo basico del generador (no del cifrador) es este:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main() {
char clave[30];
unsigned char *subc;
int i,j,n,k,l,m,salto;
long numero;
unsigned long long semilla;
printf("ingrese la clave\n");
gets(clave);
n=strlen(clave);
subc=malloc(n*n);
semilla ^= semilla;
l ^= l;
for(i=0;i<n;i++)
semilla += (long long)clave[i];
semilla <<= 1;
semilla++;
for(m=0;m<n;m++) {
for(i=0;i<n;i++) {
for(j=0;j<clave[i];j++) {
semilla *= semilla;
semilla %= 2147483629;
semilla *= 16811;
semilla %= 2147483629;
}
numero = (long) semilla;
// printf("%12u %08X\n",numero,numero);
salto ^= salto;
for(k=7;k>=0;k--) {
if(!clave[i]&1<<k)
salto++;
subc[l] <<=1;
if(numero & 1<<(k+23-salto))
subc[l]++;
}
l++;
}
}
printf("\n");
for(i=0;i<n;i++) {
for(j=0;j<n;j++)
printf("%4d\n",subc[i*n+j]);
//printf("\n");
}
for(i=0;i<(n*n-1);i++)
subc[i] ^= subc[i+1];
for(i=0;i<(n*n-1);i++)
printf("%4d\n",subc[i]);
for(i=0;i<(n*n-2);i++)
subc[i] ^= subc[i+1];
for(i=0;i<(n*n-2);i++)
printf("%4d\n",subc[i]);
for(i=0;i<(n*n-3);i++)
subc[i] ^= subc[i+1];
for(i=0;i<(n*n-3);i++)
printf("%4d\n",subc[i]);
free(subc);
}
esto es lo basico, solo saca por pantalla la secuencia generada.