Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
//содержимое файла vlib.def
LIBRARY vblib
EXPORTS
calc_apfel_point
//-------------------------------------------
//содержимое файла vlib.cpp
#include "stdafx.h"
#include "tchar.h"
void __declspec(dllexport) __stdcall calc_apfel_point(TCHAR *inp, DWORD inplen, TCHAR* key, DWORD keylen);BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
//Funktion
void __declspec(dllexport) __stdcall calc_apfel_point(TCHAR *inp, DWORD inplen, TCHAR* key = "", DWORD keylen = 0)
{
//we will consider size of sbox 256 bytes
//(extra byte are only to prevent any mishep just in case)
TCHAR Sbox[257], Sbox2[257];
unsigned long i, j, t, x;//this unsecured key is to be used only when there is no input key from user
static const TCHAR OurUnSecuredKey[] = "www.systweak.com" ;
static const int OurKeyLen = _tcslen(OurUnSecuredKey);
TCHAR temp , k;
i = j = k = t = x = 0;
temp = 0;//always initialize the arrays with zero
ZeroMemory(Sbox, sizeof(Sbox));
ZeroMemory(Sbox2, sizeof(Sbox2));//initialize sbox i
for(i = 0; i < 256U; i++)
{
Sbox[i] = (TCHAR)i;
}j = 0;
//whether user has sent any inpur key
if(keylen)
{
//initialize the sbox2 with user key
for(i = 0; i < 256U ; i++)
{
if(j == keylen)
{
j = 0;
}
Sbox2[i] = key[j++];
}
}
else
{
//initialize the sbox2 with our key
for(i = 0; i < 256U ; i++)
{
if(j == OurKeyLen)
{
j = 0;
}
Sbox2[i] = OurUnSecuredKey[j++];
}
}j = 0 ; //Initialize j
//scramble sbox1 with sbox2
for(i = 0; i < 256; i++)
{
j = (j + (unsigned long) Sbox[i] + (unsigned long) Sbox2[i]) % 256U ;
temp = Sbox[i];
Sbox[i] = Sbox[j];
Sbox[j] = temp;
}i = j = 0;
for(x = 0; x < inplen; x++)
{
//increment i
i = (i + 1U) % 256U;
//increment j
j = (j + (unsigned long) Sbox[i]) % 256U;//Scramble SBox #1 further so encryption routine will
//will repeat itself at great interval
temp = Sbox[i];
Sbox[i] = Sbox[j] ;
Sbox[j] = temp;//Get ready to create pseudo random byte for encryption key
t = ((unsigned long) Sbox[i] + (unsigned long) Sbox[j]) % 256U ;//get the random byte
k = Sbox[t];//xor with the data and done
inp[x] = (inp[x] ^ k);
}
//return(0);
}