Autor
|
Tema: Como cifrar letra por letra en C++ (Leído 65,066 veces)
|
Royca3
|
Gracias amigo pero me confundí yo utilizo C Pero bueno, oye Como le hago para que coja la palabra que el usuario ingresa y la cambie por otras letras (especificadas por mi) Gracias Saludos.
|
|
|
En línea
|
Homo erectus
|
|
|
cypascal
|
Aquí te dejo el que hice yo en su día, que trabaja con ficheros de texto. Se puede seleccionar el paso del cifrado, y tiene en cuenta que que cuando se llega a la Z se tiene que volver a empezar por la A. También está en esta dirección: http://cypascal.blogspot.com.es/2013/04/cifrado-cesar-en-c.html/*CIFRADO CESAR EN C/C++*/
/*Este programa se va a usar para llevar a cabo una codificación de un fichero de texto, mediante el codificado CESAR, que es uno de los métodos más simples de cifrar. La variable trans==translación de cifrado, es la que indica cuantas letras se va a correr el abecedario hacia la derecha. Ejemplo: trans=3 c1=Caracter decodificado c2=Caracter codificado c2=c1+trans Entonces en nuestro caso si c1='A' c2='A'+3='D'
El programa solo codifica letras, tanto mayúsculas como minúsculas: del ASCII 65 ('A') al 90 ('Z') y del 97 ('a') al 122 ('z'). */
#include <stdio.h> #include <string.h>
int main(void) { FILE *dat1,*dat2; char nombre1[50],nombre2[50],c; int trans; printf("Seleccione translacion de encriptacion: "); scanf("%d", &trans); printf("Nombre del fichero a codificar: "); scanf("%s", &nombre1); printf("Nombre del fichero donde guardar codificado: "); scanf("%s", &nombre2); if (fopen(nombre1,"r")==NULL) printf("\nEl fichero no existe.\n\n"); else { dat1=fopen(nombre1,"r");/*Se abre en modo lectura*/ dat2=fopen(nombre2,"w");/*Se abre en modo escritura*/ fscanf(dat1,"%c",&c); while (!feof(dat1)) { /*Se codifica el caracter*/ if ((c>='A')&&(c<='Z')) { c=((c+trans-'A')%('Z'-'A'+1))+'A'; } else if ((c>='a')&&(c<='z')) { c=(c+trans-'a')%('z'-'a'+1)+'a'; } /*Se escribe el caracter en el codificado*/ fprintf(dat2,"%c",c); /*Se lee un nuevo caracter*/ fscanf(dat1,"%c",&c); } fclose(dat1); fclose(dat2);/*Se cierran ambos ficheros*/ } } Salu10 y bienvenido
|
|
|
En línea
|
|
|
|
Royca3
|
Aquí te dejo el que hice yo en su día, que trabaja con ficheros de texto. Se puede seleccionar el paso del cifrado, y tiene en cuenta que que cuando se llega a la Z se tiene que volver a empezar por la A. También está en esta dirección: http://cypascal.blogspot.com.es/2013/04/cifrado-cesar-en-c.html/*CIFRADO CESAR EN C/C++*/
/*Este programa se va a usar para llevar a cabo una codificación de un fichero de texto, mediante el codificado CESAR, que es uno de los métodos más simples de cifrar. La variable trans==translación de cifrado, es la que indica cuantas letras se va a correr el abecedario hacia la derecha. Ejemplo: trans=3 c1=Caracter decodificado c2=Caracter codificado c2=c1+trans Entonces en nuestro caso si c1='A' c2='A'+3='D'
El programa solo codifica letras, tanto mayúsculas como minúsculas: del ASCII 65 ('A') al 90 ('Z') y del 97 ('a') al 122 ('z'). */
#include <stdio.h> #include <string.h>
int main(void) { FILE *dat1,*dat2; char nombre1[50],nombre2[50],c; int trans; printf("Seleccione translacion de encriptacion: "); scanf("%d", &trans); printf("Nombre del fichero a codificar: "); scanf("%s", &nombre1); printf("Nombre del fichero donde guardar codificado: "); scanf("%s", &nombre2); if (fopen(nombre1,"r")==NULL) printf("\nEl fichero no existe.\n\n"); else { dat1=fopen(nombre1,"r");/*Se abre en modo lectura*/ dat2=fopen(nombre2,"w");/*Se abre en modo escritura*/ fscanf(dat1,"%c",&c); while (!feof(dat1)) { /*Se codifica el caracter*/ if ((c>='A')&&(c<='Z')) { c=((c+trans-'A')%('Z'-'A'+1))+'A'; } else if ((c>='a')&&(c<='z')) { c=(c+trans-'a')%('z'-'a'+1)+'a'; } /*Se escribe el caracter en el codificado*/ fprintf(dat2,"%c",c); /*Se lee un nuevo caracter*/ fscanf(dat1,"%c",&c); } fclose(dat1); fclose(dat2);/*Se cierran ambos ficheros*/ } } Salu10 y bienvenido Este code lo que hace es buscar un archivo y "encriptarlo" verdad? Lo que yo necesito es un programa que pida una palabra o frase y que cambie las letras ejemplo A por H b por X y asi entiendes? Pero igual Gracias saludos.
|
|
|
En línea
|
Homo erectus
|
|
|
cypascal
|
Ups!, perdón, pensaba que estábamos con Cesar. Pero no me queda claro, ¿Qé método de cifrado quieres utilizar?
Salu10
|
|
|
En línea
|
|
|
|
CCross
Desconectado
Mensajes: 36
|
Buenas amigos!! Aqui otra versión del cifrado cesar donde tu puedes indicar el desplazamiento que quieras #include <stdio.h> #include <stdlib.h> int main() { int des, i = 0, j = 0; char cadena[30] = {0}; printf("Introduce una cadena: "); scanf("%s", cadena); printf("Ingrese desplazamiento: "); scanf(" %d", &des); for(; cadena[i]!='\0'; i++) cadena[i]+=des; printf("\nEncriptado es: %s \n", cadena); for(; cadena[j]!='\0'; j++) cadena[j]-=des; printf("\nDesencriptado es: %s \n", cadena); return 0; }
Saludos
|
|
« Última modificación: 11 Junio 2013, 00:09 am por CCross »
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
for(; cadena[i]!='\0'; i++) cadena[i]+=des; printf("\nEncriptado es: %s \n", cadena ); for(; cadena[j]!='\0'; j++) cadena[j]-=des; printf("\nDesencriptado es: %s \n", cadena );
Y digo yo, que necesidad hay de hacer el caso y el inverso: char cadena_aux[30]; for(; cadena[i]!='\0'; i++) { cadena[i]+=des; cadena_aux[i] = cadena[i]; } cadenaaux[i] = '\0'; printf("\nEncriptado es: %s y descifrado es %s\n", cadena ,cadena_aux );
|
|
|
En línea
|
|
|
|
Royca3
|
Bueno Alguien que me explique algo El código de leosansan pero necesito que en lugar de ese método lo cambie por este: A = X B = J C = O D = P E = Z F = W G = A H = U I = Ñ J=L K = D L=Q M=S N = F Ñ=R O = B P=M Q=V R=H S=K T = N U=Y V= T W=I X = E Y= G Z = C
|
|
|
En línea
|
Homo erectus
|
|
|
CCross
Desconectado
Mensajes: 36
|
Y digo yo, que necesidad hay de hacer el caso y el inverso:
Pues para descifrar no y ademas la forma que propones no hace lo deseado ya que la cadena ya la habias modificado previamente y luego asignas los valores atuales que son los cifrados a la cadena auxiliar Saludos
|
|
« Última modificación: 11 Junio 2013, 00:08 am por CCross »
|
En línea
|
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Pues para descifrar no y ademas la forma que propones no hace lo deseado ya que la cadena ya la habias modificado previamente y luego asignas los valores atuales que son los cifrados a la cadena auxiliar Saludos Huy es verdad Habría que hacer la igualación antes
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Codificacion en archivos bat, letra ñ
Scripting
|
santi810
|
3
|
12,245
|
1 Diciembre 2013, 18:57 pm
por Eleкtro
|
|
|
[DUDA] Como Desactivar Dispositivos Portátiles Para Que Se Le Asigne Una Letra
Windows
|
KZN
|
3
|
2,924
|
11 Marzo 2014, 17:00 pm
por Randomize
|
|
|
Dibujar letra 'T'
PHP
|
luchi
|
2
|
2,393
|
20 Abril 2014, 22:14 pm
por luchi
|
|
|
Como con una letra direccionarme a la tabla/registro?
Programación C/C++
|
enzopaez14
|
1
|
2,115
|
5 Septiembre 2016, 02:50 am
por AlbertoBSD
|
|
|
Comparar letra una letra en un array, con una letra del abcdario
Programación C/C++
|
Naimaderis
|
2
|
3,970
|
10 Marzo 2017, 04:24 am
por Naimaderis
|
|