DWORD id = _byteswap_ulong(wcstoul(strID, NULL, 16));
BYTE InitValue[] = { 0x11,0x22,0x33,0x44,0x8A,0x19,0xB7,0x5F,0,0,0,0, 0x7D, 0x0D, 0, 0x79 };
*(DWORD*)(InitValue + 8) = id;
BYTE ivec[16] = {
0xE9, 0x8D, 0x5B, 0x07, 0xA7, 0xD2, 0xC9, 0x7E,
0x27, 0x16, 0x45, 0x20, 0x88, 0xC6, 0xDE, 0x36 };
BYTE ivec_src[16] = { 0 };
BYTE out[64] = { 0 };
BYTE src[32] = { 0 };
memset(src, 0, 32);
memcpy(src, InitValue, 16);
memcpy(ivec_src, ivec, 16);
AES_KEY aeskey;
AES_set_encrypt_key((BYTE*)"rdnRk8FezbqVDOGAHL520ymb1jWEoA60", 256, &aeskey);
AES_cbc_encrypt(InitValue, out, 16, &aeskey, ivec, 1);
memcpy(src, out, 16);
memcpy(src + 16, ivec_src, 16);
memset(ivec, 0, 16);
AES_cbc_encrypt(src, out, 32, &aeskey, ivec, 1);
CString result;
for(int i=0; i<32; i++)
{
CString tmpstr;
result += tmpstr.Format(L"%02X", out[i]);
}