Jump to content
Fórum Script Brasil
  • 0

ABC


Jose Simao
 Share

Question

#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);                
}
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...