Si quieres cifrar sólo tienes que sumar la clave a cada caracter, teniendo en cuenta que en ascii la 'A' es el 65 y la 'Z' es el 90
jackerr escribió:Si quieres cifrar sólo tienes que sumar la clave a cada caracter, teniendo en cuenta que en ascii la 'A' es el 65 y la 'Z' es el 90
nose muy bien como hacer esto, las cadenas no las domino mucho, me es mas intuitivo declarar 100 variables antes que una cadena xDD
declaro una cadena con todas las letras
char cad[28] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','ñ','o','p','q','r','s','t','u','v','w','x','y','z','\0'};)
y ahora creo otra cadena con otras letras.., estoy un poco perdido
//generamos el pass a partir de la clave
for(i=0;i<max_string_size-1;) for(n=0;n<max_string_size-1&&clave[n]!='\0'&&clave[n]!='\n';n++,i++) pass[i]=clave[n];;
pass[i]='\0';
//encriptar
for(i=0;i<max_string_size-1&&entrada[i]!='\0'&&entrada[i]!='\n';i++)salida[i]=(entrada[i]+pass[i]-66)%94+33;
salida[i]='\0';
//desencriptar
for(i=0;i<max_string_size-1&&entrada[i]!='\0'&&entrada[i]!='\n';i++)salida[i]=(94+entrada[i]-pass[i])%94+33;
salida[i]='\0';
//preencriptado para hacerlo mas robusto
salida[0]=entrada[0];
for(i=1;i<max_string_size-1&&entrada[i]!='\0'&&entrada[i]!='\n';i++)salida[i]=33+(entrada[i]+entrada[i-1]-66)%94;
salida[i]='\0';
//postencriptar si no es ininteligible
salida[0]=entrada[0];
for(i=1;i<max_string_size-1&&entrada[i]!='\0'&&entrada[i]!='\n';i++)salida[i]=33+(94+entrada[i]-salida[i-1])%94;
salida[i]='\0';
//desencripra transformando '~' en espacio
for(i=0;i<max_string_size-1&&entrada[i]!='\0'&&entrada[i]!='\n';i++) if((salida[i]=33+(94+entrada[i]-pass[i])%94)=='~')salida[i]=' ';;
salida[i]='\0'
//postencriptar transformando '~' en espacio
salida[0]=entrada[0];
for(i=1;i<max_string_size-1&&entrada[i]!='\0'&&entrada[i]!='\n';i++) if((salida[i]=33+(94+entrada[i]-salida[i-1])%94)=='~')salida[i]=' ';;
salida[i]='\0';
amuchamu escribió:Con un bucle for, puedes calcular la longitud de la cadena con strlen (http://c.conclase.net/librerias/funcion.php?fun=strlen). Ten en cuenta que el primer caracter de la cadena es lacadena[0], no lacadena[1].
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *mensaje[300];
int a;
char micadena[]="abcdefghijklmnñopqrstuvwxyz";
int main ()
{
printf("Pulsa 1 para encriptar o 2 para desencriptar");
scanf("%d",&a);
if(a=1)
{
printf("Dame un Mensaje\n");
scanf("%s",&mensaje);
getchar();
printf("Tu mensaje encriptado es %s\n"),mensaje;
}
else
{
printf("Dame el mensaje encriptado\n");
scanf("%s",&mensaje);
getchar();
printf("el mensaje desencriptado es %s\n",&mensaje);
}
}
#include <stdio.h>
#include <stdlib.h>
#define max_string_size 300
void encriptar(char* entrada, char *salida, char* clave){
int i,n;
char pass[max_string_size]="";
char noclave[2]="!";
if(clave==NULL||clave[0]=='\n'||clave[0]=='\0') clave = noclave;
//generamos el pass a partir de la clave
for(i=0;i<max_string_size-1;) for(n=0;n<max_string_size-1&&clave[n]!='\0'&&clave[n]!='\n';n++,i++) pass[i]=clave[n];;
pass[i]='\0';
//desencriptar
for(i=0;i<max_string_size-1&&entrada[i]!='\0'&&entrada[i]!='\n';i++)salida[i]=(entrada[i]+pass[i]-66)%94+33;
salida[i]='\0';
}
void desencriptar(char* entrada, char *salida, char* clave){
int i,n;
char pass[max_string_size]="";
char noclave[2]="!";
if(clave==NULL||clave[0]=='\n'||clave[0]=='\n') clave = noclave;
//generamos el pass a partir de la clave
for(i=0;i<max_string_size-1;) for(n=0;n<max_string_size-1&&clave[n]!='\0'&&clave[n]!='\n';n++,i++) pass[i]=clave[n];;
pass[i]='\0';
//desencriptar
for(i=0;i<max_string_size-1&&entrada[i]!='\0'&&entrada[i]!='\n';i++) if((salida[i]=33+(94+entrada[i]-pass[i])%94)=='~')salida[i]=' ';;
salida[i]='\0';
}
int main ()
{
int a;
char mensaje[max_string_size];
char salida[max_string_size];
char clave[max_string_size];
do{
printf("Pulsa 1 para encriptar, 2 para desencriptar o 0 para salir: ");
scanf("%d",&a);
fflush(stdin);
if(a==1){
printf("Dame un Mensaje:\n");
scanf("%s",mensaje);
fflush(stdin);
printf("Dame la clave:\n");
scanf("%s",clave);
fflush(stdin);
encriptar(mensaje,salida,clave);
printf("Tu mensaje encriptado es:\n%s\n\n",salida);
}
else if(a==2){
printf("Dame el mensaje encriptado\n");
scanf("%s",mensaje);
fflush(stdin);
printf("Dame la clave:\n");
scanf("%s",clave);
fflush(stdin);
desencriptar(mensaje,salida,clave);
printf("el mensaje desencriptado es\n%s\n\n",salida);
}
}while(a!=0);
}
//buscar primera ocurrencia de carácter en una cadena
int buscar_caracter(char *cadena,char caracter){
int i;
for(i=0;cadena[i]!=caracter&&cadena[i]!='\0';i++);
if(cadena[i]!=caracter) return -1;
return i;
}
jackerr escribió:amuchamu escribió:Con un bucle for, puedes calcular la longitud de la cadena con strlen (http://c.conclase.net/librerias/funcion.php?fun=strlen). Ten en cuenta que el primer caracter de la cadena es lacadena[0], no lacadena[1].#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *mensaje[300];
int a;
char micadena[]="abcdefghijklmnñopqrstuvwxyz";
int main ()
{
printf("Pulsa 1 para encriptar o 2 para desencriptar");
scanf("%d",&a);
if(a=1)
{
printf("Dame un Mensaje\n");
scanf("%s",&mensaje);
getchar();
printf("Tu mensaje encriptado es %s\n"),mensaje;
}
else
{
printf("Dame el mensaje encriptado\n");
scanf("%s",&mensaje);
getchar();
printf("el mensaje desencriptado es %s\n",&mensaje);
}
}
Esto es lo que llevo, pero ya me pierdo, nose como empezar a sustituir
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(char argc, char *argv[]){
// parámetros
if (argc != 3){
printf("Error, número de parámetros incorrecto.\n");
printf("Uso: %s clave \"mensaje\"\n", argv[0]);
exit(1);
}
char mensaje[1024];
int clave = atoi(argv[1]);
strcpy(mensaje, argv[2]);
// menú
char opcion = 0;
do{
printf("1. Cifrar\n");
printf("2. Descifrar\n\n");
printf("Elija una opción: ");
opcion = fgetc(stdin); fgetc(stdin);
if (opcion <= '0' || opcion > '2')
printf("Opción incorrecta\n\n");
}while (opcion <= '0' || opcion > '2');
// cifrar/descifrar
int i;
if (opcion == '1'){
for (i=0; i<strlen(mensaje); i++){
if (mensaje[i] != ' ') // ignoro espacios
// paso a minúsculas, resto 'a' para trabajar con 0..26, sumo clave
// aplico módulo longitud alfabeto, sumo 'a' para volver a ascii
mensaje[i] = ((tolower(mensaje[i]) - 'a' + clave) % 26) + 'a';
}
printf("\nMensaje cifrado: \"%s\"\n", mensaje);
}else{
for (i=0; i<strlen(mensaje); i++){
if (mensaje[i] != ' '){ // ignoro espacios
mensaje[i] = tolower(mensaje[i]) - (clave % 26);
if (mensaje[i] < 'a')
mensaje[i] += 26;
}
}
printf("\nMensaje descifrado: \"%s\"\n", mensaje);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *cadena;
char *inversa;
int longitud;
int i=;/*int=0??*/
int main(void){
printf("Introduce una cadena");
gets (cadena);
longitud=strlen(cadena);
for (i = 0;i < longitud; i++){
inversa[i]=cadena[longitud-1-i];
printf("%c",inversa[i]);}
for (i=0;i<longitud;i++){
printf("%c",cadena[longitud-1-i]);
}
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char cadena[500];
char inversa[500];
int longitud;
int i=0;
int a;
int main(void){
printf("Pulsa 1 para encriptar o 2 para desencriptar ");
scanf("%d",&a);
if(a==1)
{
printf("Introduce una cadena: ");
scanf("%s",cadena);
longitud=strlen(cadena);
printf("Tu mensaje encriptado es: ");
for (i = 0;i < longitud; i++){
inversa[i]=cadena[longitud-1-i];
printf("%c",inversa[i]);}
for (i=0;i<longitud;i++){
printf("%c",cadena[longitud]);
}
}
else
if (a==2)
{
printf("Introduce el mensaje anteriormente encriptado ");
scanf("%s",cadena);
longitud=strlen(cadena);
printf("tu mensaje desencriptado es: ");
for (i = 0;i < longitud; i++){
inversa[i]=cadena[longitud-1-i];
printf("%c",inversa[i]);}
for (i=0;i<longitud;i++){
printf("%c",cadena[longitud]);
}
}
}