Select Git revision
cifra_railOnSteroids.c
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;
}