Pessoal, eu abro um arquivo com fopen, em modo binario para leitura e um para escrita...
Leio ele com fread de 3 em tres bytes e faço uma conta, como minha conta é maior que 4 bytes, quando eu utilizo fwrite eu gravo em 4 em 4 bytes...
Ou seja leio em 3bytes, faço uma criptografia e gravo em 4bytes...
até ai tudo bem... dd
Agora eu faço o processo inverso...
Leio em 4bytes e gravo em 3bytes... isso é necessario porque eu to utilizando um criptografia RSA, que utiliza duas chaves, ou seja quando criptografo um 3bytes ele me retorna 4 bytes e quando decriptografo ele retorna 3 bytes... Então eu tenho que fazer isso para o arquivo ser gravado de maneira certa
Eu já fiz um teste, peguei os primeiros 3bytes do arquivo e deu 18430388 depois criptografei dicou 148215021, depois fiz o processo inverso peguei os primeiros peguei os primeiros 4bytes e decriptografei, ficando exatamente igual ao que eu peguei 18430388... Agora nessa ora que acho fiz algo de errado, na ora de gravar esse valor, para ficar igual ao arquivo origina....
Não da para abrir, diz que não esta no formato BITMAP, o tamanho esta igual do original...
O ERRO NÃO ESTA SENDO A CRIPTOGRAFIA E NEM A DECRIPTOGRAFIA, POIS JÀ TESTEI ISSO... ESTA SENDO NA ORA DE GRAVAR E LER...
OBS.: não bote imagem ou arquivo muito grande se não vai demorar rsrsr...
Aqui em baixo esta o codigo quando criptofrafo.
se alguém quiser testar:
{
FILE *AB;
FILE *GE;
AB = fopen("imagem.bmp", "rb"); /* Abre arquivo binário para leitura */
GE = fopen("gerado.bmp", "wb"); /* Abre arquivo binário para escrita*/
unsigned long int POSI, POSGE, DECIMAL, N, X, PP, J;
Pergunta
WarSoldier
Pessoal, eu abro um arquivo com fopen, em modo binario para leitura e um para escrita...
Leio ele com fread de 3 em tres bytes e faço uma conta, como minha conta é maior que 4 bytes, quando eu utilizo fwrite eu gravo em 4 em 4 bytes...
Ou seja leio em 3bytes, faço uma criptografia e gravo em 4bytes...
até ai tudo bem... dd
Agora eu faço o processo inverso...
Leio em 4bytes e gravo em 3bytes... isso é necessario porque eu to utilizando um criptografia RSA, que utiliza duas chaves, ou seja quando criptografo um 3bytes ele me retorna 4 bytes e quando decriptografo ele retorna 3 bytes... Então eu tenho que fazer isso para o arquivo ser gravado de maneira certa
Eu já fiz um teste, peguei os primeiros 3bytes do arquivo e deu 18430388 depois criptografei dicou 148215021, depois fiz o processo inverso peguei os primeiros peguei os primeiros 4bytes e decriptografei, ficando exatamente igual ao que eu peguei 18430388... Agora nessa ora que acho fiz algo de errado, na ora de gravar esse valor, para ficar igual ao arquivo origina....
Não da para abrir, diz que não esta no formato BITMAP, o tamanho esta igual do original...
O ERRO NÃO ESTA SENDO A CRIPTOGRAFIA E NEM A DECRIPTOGRAFIA, POIS JÀ TESTEI ISSO... ESTA SENDO NA ORA DE GRAVAR E LER...
OBS.: não bote imagem ou arquivo muito grande se não vai demorar rsrsr...
Aqui em baixo esta o codigo quando criptofrafo.
se alguém quiser testar:
{
FILE *AB;
FILE *GE;
AB = fopen("imagem.bmp", "rb"); /* Abre arquivo binário para leitura */
GE = fopen("gerado.bmp", "wb"); /* Abre arquivo binário para escrita*/
unsigned long int POSI, POSGE, DECIMAL, N, X, PP, J;
long long Z;
double size;
int I;
int *NB;
DECIMAL 239998377;
N = 708654517;
NB = convbin(DECIMAL);
//---------- Pegando o tamanho do arquivo..
fseek (AB,0,SEEK_END);
size=ftell(AB);
size=((size-1)/3);
fseek (AB,0,SEEK_SET);
// -------------------------------------------------------
POSI=0;
POSGE=0;
for (J=0; J<=size; J++)
{
fseek (AB,POSI,0);
fread (&PP, 3, 1, AB);
X=PP;
Z=1;
for (I=NB[0]; I>=1; I--)
{
Z=(Z*Z)%N;
if (NB==1)
Z=(Z*X)%N;
fseek (GE,POSGE,0);
fwrite(&Z,4, 1,GE);
}
POSGE=POSGE+4;
POSI=POSI+3;
}
fclose (AB);
fclose (GE);
Label1->Caption="Criptografado";
delete [] NB;
}
//PROCESSO INVERSSO BOTANDO O BMP ORIGINAL
{
FILE *AB;
FILE *GE;
AB = fopen("gerado.bmp", "rb"); /* Abre arquivo binário para leitura */
GE = fopen("decriptado.bmp", "wb"); /* Abre arquivo binário para escrita*/
unsigned long int POSI, POSGE, DECIMAL, N, X, PP, J;
long long Z;
double size;
int I;
int *NB;
DECIMAL = 98995993;
N = 708654517;
NB = convbin(DECIMAL);
//---------- Pegando o tamanho do arquivo..
fseek (AB,0,SEEK_END);
size=ftell(AB);
size=((size-1)/4);
fseek (AB,0,SEEK_SET);
// ----------
POSI=0;
POSGE=0;
for (J=0; J<=size; J++)
{
fseek (AB,POSI,0);
fread (&PP, 4, 1, AB);
X=PP;
Z=1;
for (I=NB[0]; I>=1; I--)
{
Z=(Z*Z)%N;
if (NB==1)
Z=(Z*X)%N;
fseek (GE,POSGE,0);
fwrite(&Z,3, 1,GE);
}
POSGE=POSGE+3;
POSI=POSI+4;
}
fclose (AB);
fclose (GE);
delete [] NB;
}
//ISSO AQUI FAZ PARTE DA CRIPTOGRAFIA NÃO A NECESSIDADE DE OLHAR, POIS JÁ TESTEI... É Só PARA SE QUISER RODAR O PROGRAMA
//==============================================
int* convbin(unsigned long int DECIMAL)
{
int* BIN = new int[MAX];
int I;
I=1;
do
{
BIN = DECIMAL % 2;
DECIMAL = DECIMAL / 2;
I++;
}
while (DECIMAL != 0);
BIN[0]=I-1; /*atribui o numero de bits na posicao 0*/
return BIN;
}
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.