void MakeCryptPassword(LPCSTR Src,BYTE Dest[FTP_PWD_LEN]) { BYTE *CurDest; clock_t Random = clock(); BYTE XorMask; int Done; //Log(( "MakeCryptPassword: [%s]",Src )); memset(Dest,0,sizeof(Dest)); if(!Src || !Src[0]) return; for(int I=0; I < (int)sizeof(Dest); I++) { CurDest = Dest; CurDest[0] = (BYTE)((Random+I)|0x80); CurDest[1] = (BYTE)((Random>>8)|0x80); strcpy(((char*)CurDest)+2,Src); XorMask = (CurDest[0]^CurDest[1])|80; CurDest += 2; Done = TRUE; while(*CurDest) { *CurDest^=XorMask; if(*CurDest == 0) { Done=FALSE; break; } CurDest++; } if(Done) break; } //Log(( "MakeCryptPassword: %02X %02X %02X %02X %02X %02X",Dest[0],Dest[1],Dest[2],Dest[3],Dest[4],Dest[5] )); } void DecryptPassword(BYTE Src[FTP_PWD_LEN],char *_Dest) { BYTE XorMask = (Src[0]^Src[1]) | 80; int n; char *Dest = _Dest; //Log(( "DecryptPassword: %02X %02X %02X %02X %02X %02X",Src[0],Src[1],Src[2],Src[3],Src[4],Src[5] )); if(Src[0] && Src[1] && Src[2]) for(n = 2; n < FTP_PWD_LEN; n++,Dest++) { *Dest = Src[n] ^ XorMask; if(*Dest == 0 || *Dest == XorMask) break; } *Dest = 0; //Log(( "DecryptPassword: [%s]",_Dest )); }