Skip to content
Snippets Groups Projects
Select Git revision
  • main default protected
1 result

cifra_railOnSteroids.c

Blame
  • cifra_railOnSteroids.c 2.55 KiB
    #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[num_chaves-i-1] = 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;
            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';
            }
    
    
    
            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 j=0; j<caracteresporlinha; j++){
                    for(int i=0; i < chaves_parciais[itr]; i++){
                        printf("linha %d coluna %d caracter %c\n", i,j,texto_cifrado[caracter]);
                        matrizTransposicao[i][j] = texto_cifrado[caracter];
                        caracter++;
                    }
                }
                
                caracter = 0;
                for(int i=0; i < chaves_parciais[itr]; i++){
                    for(int j=0; j<caracteresporlinha; j++){
                        if(caracter < tamanho_texto){
                            printf("%c\n", matrizTransposicao[i][j]);
                            texto_cifrado[caracter] = matrizTransposicao[i][j];
                        }
                        caracter++;
                    }
                }
        
        }
        
    
    
    
        puts("=== texto cifrado eh ===");
        for(int i=0; i<tamanho_texto; i++){
            printf("%c", texto_cifrado[i]);
        }
        puts("");
    
        
    
    
    
        return 0;
    }