|
Mostrar Mensajes
|
Páginas: 1 [2] 3 4
|
12
|
Seguridad Informática / Criptografía / Sistema de cifrado por lote de texto plano
|
en: 29 Marzo 2016, 17:37 pm
|
Hola a todos, un amigo y yo hemos estado trasteando un poco con C y hemos creado un cifrado algo simplón y queremos saber como de fuerte es. Os comento un poco como funciona. Se mete un texto de entrada y uan contraseña y en la salida cada caracter de la entrada se sumará al caracter correspondiente de la contraseña siguiendo este esquema, tanto para el cifrado como el descifrado. /* *Title: crypt *Description: It de/encrypt strings *@param pass[]: string which we use like password *@param text[]: string which we will encrypt *@param x: false = encrypt, true = decrypt *@param name[]: name of output *@return text_length: text length */ void crypt(char pass[], char text[], bool x, char name[]) { int pass_length; int text_length; int passPosition = 0; //Relative position in pass[] int textPosition = 0; //Relative position in text[] pass_length = length(pass); text_length = length(text); int sol; //output character
FILE *nom;
nom = fopen(name, "w");
for(textPosition = 0; textPosition < text_length; textPosition++) { if(passPosition == pass_length) { passPosition = 0; } if(x == false) { sol = text[textPosition] + pass[passPosition]; while(sol > 126) { sol -= 94; } } else { sol = text[textPosition] - pass[passPosition]; while(sol < 32) { sol += 94; } } passPosition++; fputc(sol, nom); } fclose(nom); } Además tiene la opción de generar texto aleatorio tras la salida para meter datos que no forman parte del texto original y creemos que permite una barrera contra un ataque por estadistica de palabras. Todo el código está en https://github.com/JoseluCross/cryptoJKA/tree/master/cryptojkaQueremos saber si es seguro, o al menos, cuan seguro es. Muchas gracias
|
|
|
13
|
Programación / Programación C/C++ / Re: Meter en cadena argumento en C
|
en: 29 Marzo 2016, 08:14 am
|
Los ficheros ya los coje y los escribe, cambiando lo del i++ por el else if ya no da error en el core, ahora solo tengo problemas respecto a que falte un flag y tanto la entrada como la salida sean incorrectos, y me pasa que no funciona el resto del programa pero ya algo se va solucionando. Muchas gracias nuevamente por toda la ayuda
|
|
|
15
|
Programación / Programación C/C++ / Re: Meter en cadena argumento en C
|
en: 29 Marzo 2016, 00:20 am
|
Eso que has puesto me serviría para el archivo de entrada, pero para la salida necesito el nombre porque lo he de enviar a otras funciones, si se puede hacer directamente mejor, pero no soy muy ducho con esto. Tambien necesito texto para pass o text. Gracias tambien por tu ayuda
|
|
|
16
|
Programación / Programación C/C++ / Meter en cadena argumento en C
|
en: 28 Marzo 2016, 23:04 pm
|
Hola a todos, quiero meter un argumento especificado en la ejecución del programa en una cadena para luego abrir un archivo con ese nombre. Os dejo el código proque como lo he intentado no funciona. int main(int argc, char *argv[]) { bool state; //false when encrypt, true when decrypt bool ran = false; //false: not random generation, true: random generation bool fil; //false: not file, true, with file int cant = 0; //number of characters in random generation char text[MAX_TEXT]; //imput character char pass[MAX_PASS]; //Imput pass char in[35]; //input file char out[35]; //output file
//Flags options int i; for(i = 0; i < argc; i++) { if(strcmp(argv[i], "-o") == 0) { strcpy(out[0], argv[i + 1]); i++; } if(strcmp(argv[i], "-f") == 0) { strcpy(in[0], argv[i + 1]); fil = true; i++; } if(strcmp(argv[i], "-p") == 0) { strcpy(pass[0], argv[i + 1]); i++; } if(strcmp(argv[i], "-t") == 0) { strcpy(text[0], argv[i + 1]); fil = false; i++; } if(strcmp(argv[i], "-e") == 0) { state = false; i++; } if(strcmp(argv[i], "-d") == 0) { state = true; i++; } if(strcmp(argv[i], "-r") == 0) { ran = true; cant = atoi(argv[i + 1]); i++; } if(strcmp(argv[i], "-h") == 0) { helpbox(); //In methods.c return 0; } }
Espero que tengáis suficientes, si necesitais mas código está en https://github.com/JoseluCross/cryptoJKA/tree/master/unestable-versionMuchas gracias por adelantado
|
|
|
18
|
Programación / Programación C/C++ / Re: [C][?] No se ejecutan printf
|
en: 23 Marzo 2016, 19:55 pm
|
El código completo es /*Título: Ejercicio 2 *Descripción: Calcula el cambio a base decimal, octal y hexadecimal *Autor: José Luis Garrido Labrador (JoseluCross) *Version: 1.0 - mar/16 */
#include <stdio.h> #include <stdbool.h> #include <math.h>
int clean_stdin(void); void cambioBinario(int); void imprimeResultado(int);
int main() { int n; //Número que añadiremos char c; //Carácter de control bool control = false; //Variable para el control de entrada
do { printf("Introduce un número en base decimal: "); if(scanf("%d%c", &n, &c) != 2 || c != '\n') { printf("El número %d%c no es válido\n", n, c); clean_stdin(); control = false; } else { printf("prueba"); if(n >= 0) { printf("El binario de %d es: ", n); cambioBinario(n); //cambioOctal(decimal); //cambioHex(decimal); control = true; } } } while(control == false || n < 0);
return 0; }
//Función para la limpieza del buffer del teclado int clean_stdin() { while(getchar() != '\n') ; return 1; }
/* *Nombre: cambioBinario *Descripción: Convierte un número decimal a binario *@param n: número que convertiremos *@author: JoseluCross */ void cambioBinario(int n) { int x = 1; //Variable de longitud //Asignamos tamaño de cifras que tendrá el número en binario for(x = 1; pow(2,x) > n; x++) ; int tam[x]; //El vector donde almacenaremos las cifras (para este procedimiento no se usará recursividad) int p = 0; //Variable de posición //Bucle para la asignación de cifras binarias for(p = 0; p = x; p++) { tam[p] = n % 2; n = n / 2; } //Bucle para el envío a imprimir for(p = x; p = 0; p--) { imprimeResultado(tam[p]); } printf("\n"); }
/* *Nombre: imprimeResultado *Descripción: imprime el resultado de cada cambio *@param a: valor que se imprimirá *@author: JoseluCross */ void imprimeResultado(int a) { printf("%d", a); }
|
|
|
19
|
Programación / Programación C/C++ / [C][?] No se ejecutan printf
|
en: 23 Marzo 2016, 13:55 pm
|
Tengo un problema la mar de raro. Pase lo que pase nunca imprime el texto "prueba", si meto un valor incorrecto si se ejecuta el printf("El número %d%c no es válido\n",n,c) El código es int main() { int n; //Número que añadiremos char c; //Carácter de control bool control = false; //Variable para el control de entrada
do { printf("Introduce un número en base decimal: "); if(scanf("%d%c", &n, &c) != 2 || c != '\n') { printf("El número %d%c no es válido\n", n, c); clean_stdin(); control = false; } else { printf("prueba"); if(n >= 0) { printf("El binario de %d es: ", n); cambioBinario(n); control = true; } } } while(control == false || n < 0);
return 0; } Muchas gracias de antemano
|
|
|
20
|
Programación / Scripting / Re: [SH] Error al ejecutar script, [: falta un `]'
|
en: 21 Febrero 2016, 20:37 pm
|
#!/bin/sh echo Introduzca el formato, 1 tar, 2 tar.gz, 3 tar.bz2 read format if [ $format -eq 1 ];then tar cf $1.tar $1 echo Se ha comprimido $1 en $1.tar elif [ $format -eq 2 ];then tar czf $1.tar.gz $1 echo Se ha comprimido $1 en $1.tar.gz elif [ $format -eq 3 ];then tar cjf $1.tar.bz2 $1 echo Se ha comprimido $1 en $1.tar.bz2 else echo Formato no incluido, reinicie el script fi
La variable format dentro del if va sin comillas y los iguales se pone -eq (=)
Me sigue dando el mismo error, cambiando exactamente lo que me has dicho sigue sin funcionar. [EDITO]Al final lo solucioné, el problema estaba que entre los números y el corchete no había un espacio. Si a alguién más tiene ese mismo error ya sabes cual es el origen. Muchas gracias a wuwu8 por su ayuda
|
|
|
|
|
|
|