Вопрос снят. Алгоритм вычислили
inline unsigned char HexTetraToByte(const unsigned char HexTetra)
{
if ((HexTetra >= '0') && (HexTetra <= '9'))
return HexTetra - '0';
else if((HexTetra >= 'A') && (HexTetra <= 'F'))
return 10 + HexTetra - 'A';
else
return 10 + HexTetra - 'a';
};
//---------------------------------------------------------------------------
static const char* HEX = "0123456789ABCDEF";
void Encrypt(char* EncryptedPassword, // 17 байт
const char* Key, // 16 байт
const char* Password) // 8 байт
{
unsigned char Buf[8];
const char* pch = Key;
unsigned char tmp;
for (unsigned i = 0; i < sizeof(Buf); i++)
{
Buf[i] = HexTetraToByte(*pch++) << 4;
Buf[i] += HexTetraToByte(*pch++);
Buf[i] ^= (unsigned char) Password[i];
}
tmp = Buf[sizeof(Buf) - 1];
for (unsigned i = 0; i < sizeof(Buf); i++)
{
tmp += Buf[i];
Buf[i] = tmp;
EncryptedPassword[i * 2] = HEX[tmp >> 4];
EncryptedPassword[i * 2 + 1] = HEX[tmp & 0x0F];
}
EncryptedPassword[sizeof(Buf) * 2] = 0;
};