From d959617bea92ffc18f32392a7d470d1935526e82 Mon Sep 17 00:00:00 2001 From: Marlon Griebeler <mgh16@inf.ufpr.br> Date: Sun, 12 Feb 2023 16:51:03 -0300 Subject: [PATCH] talvez os dois funcionando --- cifra_railOnSteroids.c | 3 +- decifra_railOnSteroids.c | 106 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 decifra_railOnSteroids.c diff --git a/cifra_railOnSteroids.c b/cifra_railOnSteroids.c index a282c10..141b150 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 0000000..74e35a4 --- /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 -- GitLab