ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Как зашифровать данные заданным ключом DES через CryptoAPI
  #1  
Старый 14.05.2009, 17:07
Аватар для Yazzer
Yazzer
Новичок
Регистрация: 13.05.2009
Сообщений: 10
Провел на форуме:
19571

Репутация: 0
По умолчанию Как зашифровать данные заданным ключом DES через CryptoAPI

Добрый день. В общем проблема такая. Надо написать алгоритм хеширования LM пароля.

Я получаю два 7 байтых ключа, каждый их которых надо использовать для создания соответственно 2-х 8 байтных DES ключа.

Мне сказали, что теоретически DES шифрование добавляет в каждый байт ключа по биту проверки четности и получается 8 байтовый ключ для DES.

Как это реализовать на C++ Builder?

Пока у меня есть такой вот DES
[CODE=bcb]



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>
[/CODE]

и два 7 значных ключа. Правда в Ansi и в 16-м предсталение.
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как стать хакером! foreva Болталка 19 12.12.2007 00:12
Установка Windoze глазами линуксоида (100% факты) nerezus Болталка 47 16.10.2005 15:06
Внедрение Sql кода с завязанными глазами k00p3r Чужие Статьи 0 12.06.2005 20:48
Как через phpmyadmin запрость данные пользователей ? Майор Форумы 3 26.12.2004 02:44



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ