SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: maga10 en Jueves 3 de Diciembre de 2009, 18:54

Título: Como encriptar y desencriptar en C (uso code block)
Publicado por: maga10 en Jueves 3 de Diciembre de 2009, 18:54
Este es el codigo de lo que hice a la hora de compilarlo y ejecutarlo no hace nada, les agradeceria si alguien me pudiera ayudar..

/* Programa: Alumno: Practico N° 16, ejercicio 5
   Autor: Gutierrez, Carina Magali
   Fecha de entrga: 16/10/2009
   Turno: tarde
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char encriptar_texto(char *pCh[]);
char desencriptar_texto(char encriptado[]);
int main()
{
    char ch[20]={0}, encriptar, desencriptar, encriptado[20];
    char *pCh[20]={0};
    int i;

    printf("ingrese un texto:  ");
    scanf("%s", ch);

    for (i=0 ; i<20 ; i++)
    {
        pCh = &ch;
    }

    encriptar = encriptar_texto(pCh);
    printf("nEl texto encriptado es: %c", encriptar);

    desencriptar = desencriptar_texto(encriptado);
    printf("nEl texto desencriptado es: %c", desencriptar);

    return 0;
}

char encriptar_texto(char *pCh[])
{
    char encriptado[20];
    int i;

    for (i=0 ; i!='n' ; i++)
    {
        encriptado= *pCh + 3;
        //printf("nEl texto encriptado es: %c", encriptado);
    }
    return 0;
}

char desencriptar_texto(char encriptado[])
{
    char desencriptado[20];
    int i;

    for (i=0 ; i!='n' ; i++)
    {
        desencriptado = encriptado - 3;
        //printf("nEl texto desencriptado es: %c", desencriptado);
    }
    return 0;
}
Título: Re: Como encriptar y desencriptar en C (uso code block)
Publicado por: ProfesorX en Jueves 3 de Diciembre de 2009, 21:12
Tienes varios errores.

1. En las funciones encriptar y desencriptar regresas un char, pero en el return de las funciones pones 0, o sea nada.

2. Utilizas variables de tipo char para guardar los textos encriptados/desencriptados, cuando deberias utilizar arreglos de char, o sea, encriptar[20], desencriptar[20].

3. La condicion de los ciclos for esta equivocada, preguntas i = 'n', cuando deberia ser cadena != '', ya que lo que debes preguntar es si llegamos al fin de la cadena, ademas '' es el terminador de las cadenas.

4. Para imprimir la cadena encriptada/desencriptada utilizas %c, deberias ser %s, una vez que cambies las variables encriptar/desencriptar de tipo char a tipo arreglo de char (o sea, cadena).

5. Tus funciones encriptar/desencriptar regresan un char, cuando deberian regresar un char* (puntero a char), aunque te recomendaria que en lugar de funciones que regresen un valor, utilices funciones void, y mejor pongas como parametros la cadena sin encriptar y la cadena encriptada en la primera funcion, y en la segunda funcion pon como parametro la cadena encriptada y la cadena desencriptada.

Esos serian los principales, corrijelos, y suerte.

Saludos :)
Título: Re: Como encriptar y desencriptar en C (uso code block)
Publicado por: JrcsDev en Viernes 4 de Diciembre de 2009, 07:58
No quiero ser sapo, pero publicaste este mismo mensaje mas de una vez?
Título: Como encriptar y desencriptar en C (uso code block)
Publicado por: maga10 en Viernes 18 de Diciembre de 2009, 20:38
Aca esta el codigo mejorado y andando por ahi a alguien le sirve, yo estuve buscando algo asi y no encontre en ningun lado!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define N 80

void encriptarFrase();
void desencriptarFrase();

int largo;
char frase[N];

int main ()
{
    printf("Ingrese la frase: ");
    gets(frase);

    largo = strlen(frase);

    encriptarFrase();
    printf("La frase encriptada es: %sn",frase);

    desencriptarFrase();
    printf("La dfrase desencriptada es: %sn",frase);
    return 0;
}

void encriptarFrase ()
{
    int i;

    for(i=0 ; i<largo ; ++i)
    {
        //convierte las minuscalas a mayuscula.
        *(frase + i) = toupper(*(frase + i));

        //descarta los digitos
        if(isalpha(*(frase + i)))
        {
            //verifica los casos especiales X-Y-Z
            if(*(frase + i) > 87)
            {
                *(frase+i) = *(frase+i) - 23;
            }
            else
            {
                *(frase + i) = *(frase + i) + 3;
            }
        }
    }
}

void desencriptarFrase ()
{
    int i;

    for(i=0 ; i<largo ; ++i)
    {
        if(isalpha(*(frase + i)))
        {
            if(*(frase + i) < 68)
            {
                *(frase+i)= *(frase+i) + 23;
            }
            else
            {
                *(frase+i)= *(frase+i) - 3;
            }
        }
    }
}