const DWORD Delta=0x9E3779B9;
union D2B
{
DWORD dw[4];
BYTE bt[16];
};
//---------------------------------------------------------------------------
void EnCryptDWORD(DWORD &y,DWORD &z,DWORD k0,DWORD k1,DWORD k2,DWORD k3)
{
DWORD a,sum=0;
for(a=0;a<32;a++)
{
sum+=Delta;
y+=((z<<4)+k0)^(z+sum)^((z>>5)+k1);
z+=((y<<4)+k2)^(y+sum)^((y>>5)+k3);
}
}
//---------------------------------------------------------------------------
void EnCrypt(BYTE data[],DWORD key[])//8,16
{
union D2B dt={0};
memcpy((void*)dt.bt,data,8);
EnCryptDWORD(dt.dw[0],dt.dw[1],key[0],key[1],key[2],key[3]);
memcpy(data,dt.bt,8);
}
//---------------------------------------------------------------------------
void FileEnCrypt(char fnme[],char key[])
{
union D2B ky={0};
BYTE buff[8],bred;
memcpy(ky.bt,key,16);
SECURITY_ATTRIBUTES sa={0};
HANDLE hFile=CreateFile(fnme,GENERIC_READ | GENERIC_WRITE,0,&sa,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE){ShowError();return;}
do
{
if(!ReadFile(hFile,buff,8,&bred,NULL)){ShowError();return;}
if(bred==8)EnCrypt(buff,ky.dw);
if(SetFilePointer(hFile,-bred,NULL,FILE_CURRENT)==0xFFFFFFFF){ShowError();return;}
if(!WriteFile(hFile,buff,bred,&bred,NULL)){ShowError();return;}
}
while(bred==8);
CloseHandle(hFile);
}
Ошибка, при чтении и записи файла.
Цитата:
Originally posted by lord Kelvin
Есть подозрение, что где-то здесь закралась ошибка.=(
Код:
const DWORD Delta=0x9E3779B9;
union D2B
{
DWORD dw[4];
BYTE bt[16];
};
//---------------------------------------------------------------------------
void EnCryptDWORD(DWORD &y,DWORD &z,DWORD k0,DWORD k1,DWORD k2,DWORD k3)
{
DWORD a,sum=0;
for(a=0;a<32;a++)
{
sum+=Delta;
y+=((z<<4)+k0)^(z+sum)^((z>>5)+k1);
z+=((y<<4)+k2)^(y+sum)^((y>>5)+k3);
}
}
//---------------------------------------------------------------------------
void EnCrypt(BYTE data[],DWORD key[])//8,16
{
union D2B dt={0};
memcpy((void*)dt.bt,data,8);
EnCryptDWORD(dt.dw[0],dt.dw[1],key[0],key[1],key[2],key[3]);
memcpy(data,dt.bt,8);
}
//---------------------------------------------------------------------------
void FileEnCrypt(char fnme[],char key[])
{
union D2B ky={0};
BYTE buff[8]
[color=RED]DWORD bred;[/color]
memcpy(ky.bt,key,16);
SECURITY_ATTRIBUTES sa={0};
HANDLE hFile=CreateFile(fnme,GENERIC_READ | GENERIC_WRITE,0,&sa,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE){ShowError();return;}
do
{
if(!ReadFile(hFile,buff,8,&bred,NULL)){ShowError();return;}
if(bred==8)EnCrypt(buff,ky.dw);
if(SetFilePointer(hFile,-bred,NULL,FILE_CURRENT)==0xFFFFFFFF){ShowError();return;}
if(!WriteFile(hFile,buff,bred,&bred,NULL)){ShowError();return;}
}
while(bred==8);
CloseHandle(hFile);
}
union D2B
{
DWORD dw[4];
BYTE bt[16];
};
//---------------------------------------------------------------------------
void EnCryptDWORD(DWORD &y,DWORD &z,DWORD k0,DWORD k1,DWORD k2,DWORD k3)
{
DWORD a,sum=0;
for(a=0;a<32;a++)
{
sum+=Delta;
y+=((z<<4)+k0)^(z+sum)^((z>>5)+k1);
z+=((y<<4)+k2)^(y+sum)^((y>>5)+k3);
}
}
//---------------------------------------------------------------------------
void EnCrypt(BYTE data[],DWORD key[])//8,16
{
union D2B dt={0};
memcpy((void*)dt.bt,data,8);
EnCryptDWORD(dt.dw[0],dt.dw[1],key[0],key[1],key[2],key[3]);
memcpy(data,dt.bt,8);
}
//---------------------------------------------------------------------------
void FileEnCrypt(char fnme[],char key[])
{
union D2B ky={0};
BYTE buff[8]
[color=RED]DWORD bred;[/color]
memcpy(ky.bt,key,16);
SECURITY_ATTRIBUTES sa={0};
HANDLE hFile=CreateFile(fnme,GENERIC_READ | GENERIC_WRITE,0,&sa,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE){ShowError();return;}
do
{
if(!ReadFile(hFile,buff,8,&bred,NULL)){ShowError();return;}
if(bred==8)EnCrypt(buff,ky.dw);
if(SetFilePointer(hFile,-bred,NULL,FILE_CURRENT)==0xFFFFFFFF){ShowError();return;}
if(!WriteFile(hFile,buff,bred,&bred,NULL)){ShowError();return;}
}
while(bred==8);
CloseHandle(hFile);
}
Есть подозрение, что где-то здесь закралась ошибка.=(
И все. Обидно.=)