PDA

Ver la versión completa : Sacar un algoritmo conociendo ejemplos input y output



conradodav
02-04-2010, 17:36
Hola amigos, les dejo un pequeño problema que me encargaron en la universidad y me esta comiendo la cabeza.

Necesito programar algo que sea capaz de generar un cierto password a partir de un cierto hash.

Aqui tengo varios ejemplos que me dieron, necesito encontrar el algoritmo:

73KR-3FP9-PVKH-K29R password: 32799624

D2TV-FJH7-3PV9-82H2 password: 62333945

D9J7-FK73-XPT7-36F3 password: 44947234

9HKX-93D3-KPD3-RVF2 password: 49766692

7RTF-JVR9-VJHJ-93RD password: 72642279

KD96-DXD3-2R8P-HD38 password: 63573975

78X2-RVF3-H73J-F623 password: 55876329

969V-KXV8-X27F-JKTJ password: 55586369

DXVP-K7XD-8V9V-KVXH password: 28442226

FR8X-H6K3-6RT9-R9RT password: 85394764

KFXK-8H7H-9K2F-6X2H password: 56398554

2FH2-XPHP-XKJ9-HT69 password: 39829624

El programa debe de ser capaz de generar un password cuando yo le teclee un hash de 16

Por ejemplo

Si yo le tecleo 2DFA-92KE-29KD-QOP2 me tiene que generar un password basado en un algoritmo generado apartir de los ejemplos dados.

Marchi
02-04-2010, 21:35
Considerá lo siguiente.

Tenés una cadena de 16 caracteres (obviando los guiones que separan en grupos de 4 caracteres), suponiendo que podés usar todas las letras del alfabeto inglés y los números del 0 al 9, tendrías (26+9)^16 (es un numero de 25 dígitos decimales) posibles cadenas.

Además supongamos que cada password puede variar entre 32799624 y 85394764, por lo que tendríamos en principio 52595141 posibles passwords.

Esto nos dá como resultado (35^16)^52595141 = 35^841522256 (es un número con 1299367625 digitos decimales) posibles algoritmos.

Teniendo en cuenta que se tienen 12 ejemplos las cuentas quedarían (35^16)^(52595141 - 12) lo que nos da un número unos 300 dígitos mas chico que el anterior.


A lo que quería ir con todo ese lío de números, es que existe un inmensa cantidad de algoritmos que satisfacerían el enunciado de tu problema.

Por poner un ejemplo simple:
73KR-3FP9-PVKH-K29R password: 32799624
D2TV-FJH7-3PV9-82H2 password: 62333945
D9J7-FK73-XPT7-36F3 password: 44947234
9HKX-93D3-KPD3-RVF2 password: 49766692
7RTF-JVR9-VJHJ-93RD password: 72642279
KD96-DXD3-2R8P-HD38 password: 63573975
78X2-RVF3-H73J-F623 password: 55876329
969V-KXV8-X27F-JKTJ password: 55586369
DXVP-K7XD-8V9V-KVXH password: 28442226
FR8X-H6K3-6RT9-R9RT password: 85394764
KFXK-8H7H-9K2F-6X2H password: 56398554
2FH2-XPHP-XKJ9-HT69 password: 39829624
2222-2222-2222-2222 para cualquier otra password


O bien el problema no te lo dieron en la universidad, y estás intentando que alguien te ayude a crear un keygen para alguna aplicación de tu interés, o estás obviando información importante sobre los temas que estuvieron tratando o tu profesor no conoce mucho acerca de hashes.

Según la definición de hash, dada una función hash H(x) debe ser computacionalmente difícil encontrar un y en el dominio de H tal que H(y) = H(x).
Por lo tanto si tal función existiera, no sería practico intentar obtener la password (o alguna password que produzca el mismo hash) a partir del hash.


Saludos

Ionz
27-05-2010, 20:13
- Me desagrada
- ¿Por qué?
- No estoy a su altura.
¿Ha respondido así alguna vez un hombre?

Indudablemente; Marchi ha CE_PI_LLA_DO... a conradodav.
Saludos.