Autor
|
Tema: Problema criptograma (Leído 5,681 veces)
|
i-node
Desconectado
Mensajes: 41
|
Hola, Tengo el siguiente enunciado, pero como no tengo ni idea de criptografia ni tampoco mucho de matematicas, la verdad.. No se como realizar el segundo programa. El primero ya esta hecho y os lo pongo aqui. Gracias. Una empresa desea transmitir datos via telefonica, pero le preocupa que sus telefonos pudieran ser intervenidos. Todos los datos se transmiten como enteros de cuatro digitos. La empresa le ha pedido que escriba un programa que encripte los datos para que puiedan transmitirlos de manera mas segura. Su programa debe leer un entero de cuatro digitos y encriptarlo de la siguiente manera: reemplace cada digito por (la suma de ese digito mas 7) modulo 10. Despues intercambie el primer digito con el tercero, intercambie el segundo con el cuarto, y despliegue el entero cifrado. Escriba un programa separado que ingrese el entero de cuatro digitos cifrado, y lo desencripte para formar el numero original. #include <iostream>
using std::cout; using std::cin;
int main() { const int tamano = 4; int numero = 0; int numeroTmp[tamano]; int cont = tamano -1;
while(numero < 1000 || numero > 9999) { cout << "Introduce el mensaje de 4 digitos: "; cin >> numero; }
while(numero != 0) { numeroTmp[cont] = ((numero % 10) + 7) % 10; // Separamos los digitos, sumamos 7 y hacemos modulo 10, colocandolos del derecho numero = numero / 10; cont--; }
numero = numeroTmp[0]; // Comienza el intercambio del primer digito con el tercero numeroTmp[0] = numeroTmp[2]; numeroTmp[2] = numero;
numero = numeroTmp[1]; // Comienza el intercambio del segundo digito con el cuarto numeroTmp[1] = numeroTmp[3]; numeroTmp[3] = numero;
cout << "El numero cifrado es: ";
for(int i= 0; i<tamano; i++) // Desplegamos numero cifrado cout << numeroTmp[i];
cout << "\n";
return 0; }
|
|
|
En línea
|
|
|
|
HardForo
Desconectado
Mensajes: 219
HardForo.com
|
No veo funciones, necesitas dos una ida y otra de vuelta
|
|
|
En línea
|
HardForo: foro de Hardware y programación Se buscan Mods y colaboradores *
|
|
|
i-node
Desconectado
Mensajes: 41
|
No veo funciones, necesitas dos una ida y otra de vuelta
Se podria hacer con funciones, desde luego. Pero no es necesario. El ejercicio pide dos programas, el primero ya esta hecho. Y puedo hacer el segundo, siempre y cuando sepa que es lo que debe hacer para calcular el numero de vuelta partiendo de el numero cifrado.
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Yo lo he sacado con papel y boli Pero bueno: aquí va una pista... dos pistas en una sola idea: 1 => 8 5 => 2 entonces 2 => 5 8 => 1 ¿Qué ves?
|
|
|
En línea
|
|
|
|
i-node
Desconectado
Mensajes: 41
|
Yo lo he sacado con papel y boli Pero bueno: aquí va una pista... dos pistas en una sola idea: 1 => 8 5 => 2 entonces 2 => 5 8 => 1 ¿Qué ves? Unas equivalencias, no? Que cada numero, cifrado, siempre tendra un valor. Es decir, el 1, tras encriptarlo, siempre tendra un valor de 8 y el 5 de 2. Muchas gracias.
|
|
|
En línea
|
|
|
|
HardForo
Desconectado
Mensajes: 219
HardForo.com
|
Lo que te dice @MAFUS es: decript(encryp(valor)) = valor
Es un tipo de encriptacion simple porque la funcion es biyectiva, en la vida real no pasa eso
|
|
|
En línea
|
HardForo: foro de Hardware y programación Se buscan Mods y colaboradores *
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
cifrado: Sumar 7 al valor. Si el resultado es mayor de 10 restarle 10. Visto así sacar el descifrado no debe ser difícil.
|
|
|
En línea
|
|
|
|
i-node
Desconectado
Mensajes: 41
|
Lo que te dice @MAFUS es: decript(encryp(valor)) = valor
Es un tipo de encriptacion simple porque la funcion es biyectiva, en la vida real no pasa eso No habia leido ese termino (funcion biyectiva) en mi vida. Tendre que investigar y buscar codigo de ejemplo en Google. cifrado: Sumar 7 al valor. Si el resultado es mayor de 10 restarle 10. Visto así sacar el descifrado no debe ser difícil.
No, no le resta 10 si es mayor de 10, hace un modulo, no una division.
|
|
|
En línea
|
|
|
|
|
class_OpenGL
Desconectado
Mensajes: 437
Si usas Direct3D, no eres mi amigo :P
|
Lo mejor para este tipo de ejercicios es, como bien ha apuntado MAFUS, escribir la codificación de cada posible dígito sobre papel.
Tenemos que para codificar los dígitos tenemos que sumarles 7 y hacerle el módulo con 10. Si seguimos esta regla, cada dígito quedaría así: 0 -> 7 1 -> 8 2 -> 9 3 -> 0 4 -> 1 ... 9 -> 6
Sabiendo el patrón que se produce, es sencillo hallar la forma de volver atrás...
|
|
|
En línea
|
| Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL |
|
|
|
|
|
|