fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define SHIFT 3
  5.  
  6. void criptografarArquivo(const char *arquivoEntrada, const char *arquivoSaida) {
  7. FILE *entrada = fopen(arquivoEntrada, "r");
  8. FILE *saida = fopen(arquivoSaida, "w");
  9.  
  10. if (entrada == NULL || saida == NULL) {
  11. printf("Erro ao abrir os arquivos.\n");
  12. exit(1);
  13. }
  14.  
  15. char ch;
  16. while ((ch = fgetc(entrada)) != EOF) {
  17. fputc(ch + SHIFT, saida);
  18. }
  19.  
  20. fclose(entrada);
  21. fclose(saida);
  22. printf("Arquivo criptografado com sucesso.\n");
  23. }
  24.  
  25. void descriptografarArquivo(const char *arquivoEntrada, const char *arquivoSaida) {
  26. FILE *entrada = fopen(arquivoEntrada, "r");
  27. FILE *saida = fopen(arquivoSaida, "w");
  28.  
  29. if (entrada == NULL || saida == NULL) {
  30. printf("Erro ao abrir os arquivos.\n");
  31. exit(1);
  32. }
  33.  
  34. char ch;
  35. while ((ch = fgetc(entrada)) != EOF) {
  36. fputc(ch - SHIFT, saida);
  37. }
  38.  
  39. fclose(entrada);
  40. fclose(saida);
  41. printf("Arquivo descriptografado com sucesso.\n");
  42. }
  43.  
  44. int main() {
  45. int opcao;
  46. char arquivoEntrada[100], arquivoSaida[100];
  47.  
  48. printf("Escolha uma opção:\n");
  49. printf("1. Criptografar um arquivo\n");
  50. printf("2. Descriptografar um arquivo\n");
  51. printf("Opção: ");
  52. scanf("%d", &opcao);
  53.  
  54. printf("Digite o nome do arquivo de entrada: ");
  55. scanf("%s", arquivoEntrada);
  56. printf("Digite o nome do arquivo de saída: ");
  57. scanf("%s", arquivoSaida);
  58.  
  59. if (opcao == 1) {
  60. criptografarArquivo(arquivoEntrada, arquivoSaida);
  61. } else if (opcao == 2) {
  62. descriptografarArquivo(arquivoEntrada, arquivoSaida);
  63. } else {
  64. printf("Opção inválida.\n");
  65. }
  66.  
  67. return 0;
  68. }
  69.  
Success #stdin #stdout 0.01s 5284KB
stdin
/*  Berechnung des Hamming-Abstandes zwischen zwei 128-Bit Werten in 	*/
/*	einer Textdatei. 													*/
/*  Die Werte müssen auf einer separaten Zeile gespeichert sein			*/
/* 																		*/
/*	Erstellt: 17.5.2010													*/
/*  Autor: Thomas Scheffler												*/

#include <stdio.h>
#include <stdlib.h>

#define ARRAY_SIZE 32

unsigned Hamdist(unsigned x, unsigned y)
{
  unsigned dist = 0, val = x ^ y;
 
  // Count the number of set bits
  while(val)
  {
    ++dist; 
    val &= val - 1;
  }
 
  return dist;
}



int main (void)
{
	char hex;
	int i;
	int a[ARRAY_SIZE];
	int b[ARRAY_SIZE];
	int hamDist = 0;
	FILE* fp;
	
	//Arrays mit 0 initialisieren
	for (i = 0; i < ARRAY_SIZE; ++i)
	{
  		a[i] = 0;
  		b[i] = 0;
	}

	
	fp = fopen("hex.txt","r");
	if (fp == NULL) 
	{
		printf("Die Datei hex.txt wurde nicht gefunden!");
		exit(EXIT_FAILURE);
	}

	i=0;
	printf("1.Zeile einlesen.\n");

 	while((hex=fgetc(fp))!='\n' && hex != EOF)
    {
        a[i]=strtol(&hex,0,16);
		i++;
    }
	i=0;
	printf("2.Zeile einlesen.\n");

 	while((hex=fgetc(fp))!='\n' && hex != EOF)
    {
    	b[i]=strtol(&hex,0,16);
        i++;
    }
	fclose(fp);

	printf("Hamming-Abweichung pro Nibble:\n");
	for (i = 0; i < ARRAY_SIZE; ++i)
	{
		printf ("%i\t%i\t%i\n",a[i],b[i],Hamdist(a[i],b[i]));
		hamDist += Hamdist(a[i],b[i]);
	}
	printf ("\nHamming-Abweichung der Hash-Werte:%d\n",hamDist);
}

stdout
Escolha uma opção:
1. Criptografar um arquivo
2. Descriptografar um arquivo
Opção: Digite o nome do arquivo de entrada: Digite o nome do arquivo de saída: Opção inválida.