#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//------------------------------------------------------------------
__fastcall TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//------------------------------------------------------------------
void TForm1::encipher(unsigned int num_rounds, uint32_t v[2], uint32_t const k[4])
{
unsigned int i;
uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;
for (i=0; i < num_rounds; i++) {
v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
sum += delta;
v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
}
// ESSA LINHA já CONTEM OS VALORES ENCRIPTADOS
v1[0]=V0; v[1]=v1;
}
void TForm1::decipher(unsignes int num_rounds, uint32_t v[2], uint32_t const k[4])
unsigned int i;
uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*num_rounds;
for (i=0, i < num_rounds; i++) {
v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
sum -= delta;
v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
}
//ESSA LINHA já CONTEM OS VALORES DECRIPTADOS
v[0]=v0; v[1]=v1;
//-----------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObjct *Sender)
uint32_t v[2], chave[4];
uint32_t tamaarq;
FILE *origem, *destino;
char buffer[2];
int q;
tamaarq = FileSizeByName(nomearq->Text); //OBTEM O TAMANHO DO ARQUIVO EM BYTES
pb1->Max = tamaarq; //CONFIGURA A BARRA DE PROGRESSO
pb1->Position = 0;
tamaarq = 0;
//CONVERTE A CHAVE DO USUARIO PARA O FORMATO UINT32
chave[0] = edtch->Text[1];
chave[1] = edtch->Text[2];
chave[2] = edtch->Text[3];
chave[3] = edtch->Text[4];
if((origem=fopen(nomearq->Text.c_str(),"rb"))!=NULL { // ABRE O ARQUIVO ORIGINAL
if((destino=fopen(DESTINO,"wb"))!=NULL { // ABRE O ARQUIVO DE DESTINO TEMPORARIO
do {
q = fread(buffer,sizeof(char),2,origem); // LE DOIS BYTES DO AQUIVO ORIGINAL
if(q>0) {
v[0] = buffer[0]; v[1] = buffer[1]; //TRANSFERE OS BYTES PARA A MATRIZ V
}
tamaarq += q; pb1->Position = tamaarq; // AJUSTA A BARRA DE PROGRESSO
Application->ProcessMessages();
} while(q==2);
fclose(destino); //FECHA O ARQUIVO DE DESTINO
}
fclose(origem); // FECHA O ARQUIVO DE ORIGEM
}
DeleteFile(nomearq->Text); //DELETA O ARQUIVO ORIGINAL
RenameFile(DESTINO, nomearq->Text); //RENOMEIA O ARQUIVO TEMPORARIO
pb1->Position = 0;
MessageBox(form1->Handle,"Operação de encriptação concluida","Atenção", MB_ICOINFORMATION);
//--------------------------------------------------------------------
void__fastcall TForm1::ButtoneClick(TObject *Sender)
{
uint32_t v[2], chave[4];
uint32_t tamaarq;
FILE *origem, *destino;
int q;
char buffer[2];
tamaarq = FileSizeByName(nomearq->Text); // OBTEM O TAMANHO DO ARQUIVO EM BYTES
pb1->Max = tamaarq; // CONFIGURA A BARRA DE PROGRESSO
pb1->Position =0;
tamaarq = 0;
//CONVERTE A CHAVE DO USUARIO PARA O FORMATO UINT32
chave[0] = edtch->Text[1];
chave[1] = edtch->Text[2];
chave[2] = edtch->Text[3];
chave[3] = edtch->Text[4];
if((origem=fopen(nomearq->Text.c_str(),"rb"))!=NULL) { //ABRE O ARQUIVO ORIGINAL ENCRIPTADO
if((destino=fopen(DESTINO,"wb"))!=NULL { // ABRE O ARQUIVO DE DESTINO
do {
q = fread(v,sizeof(uint32_t),2,origem); //LE DUAS UNIDADES ENCRIPTADAS
if(q>0) {
decipher(QDEPASSOS,v,chave); // DECRIPTA AS UNIDADES
buffer[0] = v[0]; buffer[1] = v[1]; // CONVERTE EM CARACTERES ASCII
fwrite(buffer,sizeof(char),2,destino); // GRAVA O ARQUIVO DE DESTINO DECRIPTADO
}
tamaarq += q; pb1->Position = tamaarq; // AJUSTA A BARRA DE PROGRESSO
Application->ProcessMessages();
} while(q==2);
fclose(destino); //FECHA O ARQUIVO DE DESTINO
}
fclose(origem); // FECHA O ARQUIVO DE ORIGEM
}
// DELETA E RENOMEIA OS ARQUIVOS
DeleteFile(nomearq->Text);
RenameFile(DESTINO,nomearq->Text);
pb1->Position = 0;
MessageBox(Form1->Handle,"Operação de decriptação concluida","Atenção",MB_ICONINFORMATION);
}