alfinete
Power Member
código fonte encriptação/ desencriptação de ficheiro
este é o meu codigo fonte
este codigo consta de uma encritação de ficheiros atraves do algotitmo TEA , ou seja podemos desencriptar um file e desencrita-lo.
complila-lo para quem não sabe
se o ficheiro se chamar enc.c
correr o ficheiro
e - encritar ficheiro
d- desencriptar ficheiro
duvida
com este progrtamita consigo encriptar ficheiros *.txt e *.html etc
exepto *.encr
como:
http://www.megaupload.com/?d=96346URW
___________________________________________________
duvida:
atenção o ficheiro que se encontra neste link [megaupload] para download é um file que já vem encriptado, por alguem, em que a chave é 20064158, e o objectivo é desencripta-lo
como ja felei so consigo desencripatr files criados por mim e encriptados e desencriptados por mim de extensão .html e .txt, este não consigo.
gostava que me ajudassem a alterar o code para tal:
_________________________
estou a desenvolver em open suse ou suse 10.2
____________
agradecia um help urgente
espero que esteja bem explicado o caso
obrigado
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <openssl/md5.h>
void encrypt(unsigned int k[], unsigned int text[]);
void decrypt(unsigned int k[], unsigned int text[]);
char Text[8];
int i;
unsigned int k[0], val;
unsigned char md[MD5_DIGEST_LENGTH];
char *modo;
int origem, destino;
main(int argc, char*argv[])
{
/*informação ao utilizador dos parametros de funcionamento do programa*/
if (argc < 4)
{
printf("Utilização %s <origem> <destino> <op>\n", argv[0]);
exit(0);
}
//detecta se o ficheiro de origem existe e da-nos a respectiva mensagem de erro
if( (origem = open(argv[1],O_RDONLY)) == -1)
{
fprintf(stderr, "Ficheiro de origem nao existe: %s\n", argv[1]);
exit(1);
}
//detecta se o ficheiro de destino existe e da-nos a respectiva mensagem de erro
if( (destino = open(argv[2],O_RDONLY)) != -1)
{
fprintf(stderr, "Ficheiro de destino ja existe: %s\n", argv[2]);
exit(1);
}
if( (destino = open(argv[2], O_CREAT|O_RDWR)) == -1){
fprintf(stderr, "Nao foi psssivel criar ficheiro: %s\n", argv[2]);
exit(1);
}
modo = argv[3];
if( *modo =='e')
{
/* oBRIGA O UTILIZADOR A DIGITAR UMA CHAVE PARA ENCRIPTAR O FICHEIRO*/
printf("\nDigite Um Valor para gerar a chave :\n");
/* Guarda o valor digitado pelo utilizador na variavel var lendo.o*/
/*caso o utilizador não digite nada sai do programa*/
if (scanf("%d", &val) == EOF) {
exit(0);
}
/*encripta o valor dessa variavel em md5 */
MD5((unsigned char *)&val, sizeof(val), (unsigned char *)k);
/*faz um print dessa chave no ecrã*/
printf("Chave: %x %x %x %x\n", k[0], k[1], k[2], k[3]);
}
else
{
/*pede ao utilizador para inserir a chave gerada no encript*/
printf("Insira o valor da chave:");
/*Caso u utilizador a digite faz a desencriptação*/
/*caso contrario sai*/
if(scanf("%d", &val) == EOF)
{
exit(0);
}
MD5((unsigned char *)&val, sizeof(val), (unsigned char *)k);
printf("Chave: %x %x %x %x\n", k[0], k[1], k[2], k[3]);
}
/* */
while(*modo)
{
/* lê 8 bites para dentro do ficheiro de texto não encriptado */
i = read(origem, Text, 8);
if (i <= 0) break;
while (i < 8)
/* cloca espaços em cada 8 bites */
{
Text[i++] = ' ';
}
/*escolha do modo "e" para encriptar e "d" para desencriptar*/
switch (*modo)
{
case 'e':
encrypt(k, (unsigned int*) Text);
break;
case 'd':
decrypt(k, (unsigned int*) Text);
//default:
// printf("Modo errado : %s\n", modo);
// exit(1);
break;
}
/* escreve 8 bites no ficheiro encriptado */
i=write(destino, Text, 8);
}
}
/*função de encriptação*/
void encrypt(unsigned int k[], unsigned int text[]) {
unsigned int y = text[0], z = text[1];
unsigned int a = k[0], b = k[1], c = k[2], d = k[3];
unsigned int delta = 0x9e3779b9, sum = 0; int n;
for (n = 0; n < 32; n++) {
sum += delta;
y += ((z << 4) + a) ^ (z+sum) ^ ((z >> 5)+b);
z += ((y << 4) + c) ^ (y+sum) ^ ((y >> 5)+d);
}
text[0] = y; text[1] = z;
}
/*função de desencriptação*/
void decrypt(unsigned int k[], unsigned int text[]){
unsigned int y = text[0], z = text[1];
unsigned int a = k[0], b = k[1], c = k[2], d = k[3];
unsigned int delta = 0x9e3779b9;
unsigned sum = delta << 5;
// unsigned int sum=0xC6EF3720;
int n;
for (n = 0; n < 32; n++) {
z -= ((y << 4) + c) ^ (y+sum) ^ ((y >> 5) + d);
y -= ((z << 4) + a) ^ (z+sum) ^ ((z >> 5) + b);
sum -= delta;
}
text[0] = y; text[1] = z;
}
este é o meu codigo fonte
este codigo consta de uma encritação de ficheiros atraves do algotitmo TEA , ou seja podemos desencriptar um file e desencrita-lo.
complila-lo para quem não sabe
se o ficheiro se chamar enc.c
Código:
gcc enc.c -o enc -lssl
correr o ficheiro
Código:
./enc <ficheiro de origem> < ficheiro de destino> <e/d>
e - encritar ficheiro
d- desencriptar ficheiro
duvida
com este progrtamita consigo encriptar ficheiros *.txt e *.html etc
exepto *.encr
como:
http://www.megaupload.com/?d=96346URW
___________________________________________________
duvida:
atenção o ficheiro que se encontra neste link [megaupload] para download é um file que já vem encriptado, por alguem, em que a chave é 20064158, e o objectivo é desencripta-lo
como ja felei so consigo desencripatr files criados por mim e encriptados e desencriptados por mim de extensão .html e .txt, este não consigo.
gostava que me ajudassem a alterar o code para tal:
_________________________
estou a desenvolver em open suse ou suse 10.2
____________
agradecia um help urgente
espero que esteja bem explicado o caso
obrigado