diff --git a/cifra_railOnSteroids.c b/cifra_railOnSteroids.c index a282c10f959ef3b41cd4aad16738a058175c1851..141b150f28e75222d6fe39db84ea00ccb51f4639 100644 --- a/cifra_railOnSteroids.c +++ b/cifra_railOnSteroids.c @@ -49,7 +49,8 @@ int main(){ for(int itr = 0; itr < num_chaves; itr++){ printf("itr %d de %d \n", itr, num_chaves); int mod_text_pela_chave = (tamanho_texto) % chaves_parciais[itr]; - int caracteres_p_completar = chaves_parciais[itr]-mod_text_pela_chave; + + int caracteres_p_completar = (mod_text_pela_chave > 0) ? chaves_parciais[itr]-mod_text_pela_chave : 0; printf("completando %d caracteres, texto tinha %d\n", caracteres_p_completar, tamanho_texto); diff --git a/decifra_railOnSteroids.c b/decifra_railOnSteroids.c new file mode 100644 index 0000000000000000000000000000000000000000..74e35a45a00d2b0f8889cadb4099cdcf6e9583e4 --- /dev/null +++ b/decifra_railOnSteroids.c @@ -0,0 +1,106 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> + + +#define TAM_MAX_TEXTO 1000000 + +int main(){ + char texto_claro[TAM_MAX_TEXTO]; + char texto_cifrado[TAM_MAX_TEXTO] ; + long int chave; + + puts("digite o texto a ser cifrado"); + fgets(texto_claro, sizeof texto_claro, stdin); + puts("digite a chave (inteiros) para cifrar o texto"); + scanf("%ld", &chave); + + + + int num_chaves = 0; + long int aux = chave; + + while(aux != 0){ + num_chaves++; + aux = aux/10; + } + + int * chaves_parciais = malloc(sizeof(int)*num_chaves); + + for(int i=0; i < num_chaves; i++){ + chaves_parciais[i] = chave % 10; + chave = chave/10; + } + + + + int tamanho_texto = strlen(texto_claro)-1; + + for(int i=0; i<tamanho_texto; i++){ + texto_claro[i] = toupper(texto_claro[i]); + } + + for(int i=0; i<tamanho_texto; i++){ + texto_cifrado[i] = texto_claro[i]; + } + + + for(int itr = 0; itr < num_chaves; itr++){ + printf("itr %d de %d \n", itr, num_chaves); + int mod_text_pela_chave = (tamanho_texto) % chaves_parciais[itr]; + int caracteres_p_completar = (mod_text_pela_chave > 0) ? chaves_parciais[itr]-mod_text_pela_chave : 0; + printf("completando %d caracteres, texto tinha %d\n", caracteres_p_completar, tamanho_texto); + + + + + for(int i=0; i<caracteres_p_completar; i++){ + texto_cifrado[tamanho_texto+i]='X'; + } + + tamanho_texto+=caracteres_p_completar; + + + int caracteresporlinha = (tamanho_texto+mod_text_pela_chave)/chaves_parciais[itr]; + printf("caracteres por linha = %d\n", caracteresporlinha); + + char matrizTransposicao[10][caracteresporlinha]; + + int caracter=0; + for(int i=0; i < chaves_parciais[itr]; i++){ + for(int j=0; j<caracteresporlinha; j++){ + printf("linha %d coluna %d caracter %c\n", i,j,texto_cifrado[caracter]); + matrizTransposicao[i][j] = texto_cifrado[caracter]; + caracter++; + } + } + + caracter = 0; + for(int j=0; j<caracteresporlinha; j++){ + for(int i=0; i < chaves_parciais[itr]; i++){ + if(caracter < tamanho_texto){ + printf("%c\n", matrizTransposicao[i][j]); + texto_cifrado[caracter] = matrizTransposicao[i][j]; + } + caracter++; + } + } + + } + + + + + puts("=== texto decifrado eh ==="); + for(int i=0; i<tamanho_texto; i++){ + printf("%c", texto_cifrado[i]); + } + puts(""); + + + + + + return 0; +} \ No newline at end of file