Добрый день. В общем проблема такая. Надо написать алгоритм хеширования LM пароля. Я получаю два 7 байтых ключа, каждый их которых надо использовать для создания соответственно 2-х 8 байтных DES ключа. Мне сказали, что теоретически DES шифрование добавляет в каждый байт ключа по биту проверки четности и получается 8 байтовый ключ для DES. Как это реализовать на C++ Builder? Пока у меня есть такой вот DES Code: HCRYPTPROV hCryptProv; DWORD dwUserNameLen = 100; LPCSTR UserName= NULL; HCRYPTKEY hKey=DesKey1; BYTE data[8] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; BYTE key[8] = {0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1}; BYTE IV[8] = {0, 0, 0, 0, 0, 0, 0, 0}; CryptAcquireContext(&hCryptProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, 0); BYTE bKey[20]; DWORD keyLen = 8; DWORD dataLen = 8; BLOBHEADER keyHeader; keyHeader.bType = PLAINTEXTKEYBLOB; keyHeader.bVersion = CUR_BLOB_VERSION; keyHeader.reserved = 0; keyHeader.aiKeyAlg = CALG_DES; //move keyHeader into buffer for(i=0; i<sizeof(keyHeader); i++){ bKey[i] = *((BYTE*) &keyHeader + i); } //move keySize into buffer for(i=0; i<sizeof(keyLen); i++){ bKey[i + sizeof(keyHeader)] = *((BYTE*) &keyLen + i); } //move key bytes into buffer for(i=0; i<8; i++){ bKey[i + sizeof(keyHeader) + sizeof(keyLen)] = key[i]; } //Import key BLOB CryptImportKey(hCryptProv, (BYTE*) &bKey, sizeof(keyHeader) + sizeof(DWORD) + 8, 0, 0, &hKey); //set DES mode DWORD desMode = CRYPT_MODE_CBC; CryptSetKeyParam(hKey, KP_MODE, (BYTE*) &desMode, 0); //set padding mode DWORD padding = ZERO_PADDING; CryptSetKeyParam(hKey, KP_MODE, (BYTE*) &desMode, 0); //set iv CryptSetKeyParam(hKey, KP_IV, &IV[0], 0); //Set FALSE to avoid padding CryptEncrypt(hKey, 0, FALSE, 0, (BYTE*) &data[0], &dataLen, 8); CryptDestroyKey(hKey); CryptReleaseContext(hCryptProv, 0); </code> и два 7 значных ключа. Правда в Ansi и в 16-м предсталение.