hi,
i'm trying to develop a simple application which will encrypt text file
using triple des. actually i got the code from my friend, and he's using
openssl 0.9.8a while i'm using 0.9.9b. i faced a problem when compiling the
source code using borland... i'll always get the error msg
"[C++ Error] testDes.cpp(45): E2034 Cannot convert 'des_ks_struct ( *)[16]'
to 'des_ks_struct *'" and
"[C++ Error] testDes.cpp(45): E2342 Type mismatch in parameter 'ks1' (wanted
'des_ks_struct *', got 'des_ks_struct ( *)[16]')"
can someone please help me? thanks a lot.
the source code is below:
#pragma hdrstop
#include "testDes.h"
#include <Classes.hpp>
#include <openssl/des.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
void TRIPLEDESchipherFile()
{
TFileStream *j = new TFileStream("source.txt",fmOpenRead);
TFileStream *n = new TFileStream("destination.txt",fmCreate);
AnsiString myKey = "test1234";
int Mode = 1;
char ch[8], outch[8]; //Encrypt every 8 byte per block
des_cblock k1,k2,k3;
des_key_schedule ks1,ks2,ks3;
des_string_to_key(myKey.SubString(1,8).c_str(),&k1);
des_set_key_unchecked(&k1,ks1);
des_string_to_key(myKey.SubString(9,8).c_str(),&k2);
des_set_key_unchecked(&k2,ks2);
des_string_to_key(myKey.SubString(17,8).c_str(),&k3);
des_set_key_unchecked(&k3,ks3);
if(!Mode)
j->Seek(128, soFromBeginning);
else
j->Seek(0, soFromBeginning);
int la;
int sizefile = 0;
for(;;)
{
if(sizefile < j->Size && (j->Size - sizefile) >= 8)
{
j->Read(ch,8);
des_ecb3_encrypt((const_des_cblock *) ch, (des_cblock *)
outch,&ks1,&ks2,&ks3,Mode);
n->Write(outch,8);
sizefile += 8;
}
else
{
if(sizefile < j->Size)
{
j->Read(ch, j->Size -sizefile);
for(la = (j->Size - sizefile); la < 8; la++)
{
//Add some pad
ch[la] = ' ';
}
des_ecb3_encrypt((const_des_cblock *) ch, (des_cblock *)
outch,&ks1,&ks2,&ks3,Mode);
n->Write(outch,8);
sizefile += (j->Size -sizefile);
}
else
break;
}
}
FileClose(j->Handle);
FileClose(n->Handle);
}