Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: tca153 en 25 Agosto 2017, 03:58 AM

Título: ayuda con un generador pseudo-aleatorio
Publicado por: tca153 en 25 Agosto 2017, 03:58 AM
hola, estoy tratando da hacer un cifrador tipo vernam pero en lugar de una clave corta, esta la uso como semilla de un generador pseudo-aleatorio que improvise, este usa un generador congruencial lineal multiplicativo como el que usa mathlab pero con valores ligeramente distintos y una forma de seleccion de bits de ese numero para generar el numero final ( 8 bits) luego uso un xor entre los numeros generados para generar otra secuencia n-1 mas chica, mi problema es que no se si los numeros son lo suficientemente aleatorios y fuertes como para ser usados en el cifrado, alguien puede o sabe hacer las pruebas necesarias?

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


esta es una version algo primitiva pero hace precisamente lo que dije