Ir para conteúdo
Fórum Script Brasil
  • 0

ABC


Jose Simao

Pergunta

#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 para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...