Como cifrar letra por letra en C++

Iniciado por Royca3, 10 Junio 2013, 06:31 AM

0 Miembros y 2 Visitantes están viendo este tema.

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.
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
Problemas interesantes de programación en C/C++ y Pascal en:
BLOG C/C++


WWW.CYPASCAL.BLOGSPOT.COM.ES

Royca3

Cita de: cypascal en 10 Junio 2013, 22:46 PM
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.
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
Problemas interesantes de programación en C/C++ y Pascal en:
BLOG C/C++


WWW.CYPASCAL.BLOGSPOT.COM.ES

CCross

#14
Buenas amigos!!

Aqui otra versión del cifrado cesar donde tu puedes indicar el desplazamiento que quieras

Código (cpp) [Seleccionar]
#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  ;D

amchacon

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);
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

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
Homo erectus

CCross

#17
Cita de: amchacon en 10 Junio 2013, 23:32 PM
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  :silbar:

cypascal

Problemas interesantes de programación en C/C++ y Pascal en:
BLOG C/C++


WWW.CYPASCAL.BLOGSPOT.COM.ES

amchacon

Cita de: CCross en 11 Junio 2013, 00:04 AM
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  :silbar:
Huy es verdad  :rolleyes:

Habría que hacer la igualación antes  ;-)
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar