ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

14.05.2009, 20:36
|
|
Новичок
Регистрация: 13.05.2009
Сообщений: 10
Провел на форуме: 19571
Репутация:
0
|
|
я сделал вот так.
AnsiString __fastcall StrToDesKey(const AnsiString S)
{
AnsiString key;
key.SetLength(8);
char *dest=key.c_str();
char *src=S.c_str();
dest[0]=src[0] & 0x7F;
int k = 1;
for (int i=1; i < 8; i++; k++)
dest[i]=((src[i-1] >> (8-k)) | (src[i] << k)) & 0x7F;
return key;
}
а посмотрев код DES, то обнаружил что можно использовать и ANSI ключи.
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);
Только теперь у меня вообще ламерский вопрос )) мне надо использовать шифрование строки "KGS!@#$" на ключе
BYTE *key1=(BYTE*)skey1.c_str();
и
BYTE *key2=(BYTE*)skey1.c_str();
Не могу понять, что там в этом DES коде лишнее..
|
|
|

15.05.2009, 12:54
|
|
Познающий
Регистрация: 07.09.2008
Сообщений: 79
Провел на форуме: 272452
Репутация:
10
|
|
Сообщение от slesh
а вообще добирайся до битов через сишный возможности ти
Код:
typedef struct _KEY
{
char b1:1;
char b2:2;
char b3:3;
char b4:4;
char b5:5;
char b6:6;
char b7:7;
char b8:8;
} TKEY,*PKEY;
int main(int argc, char* argv[])
{
PKEY keybit;
char data[8];
data[0]=127;
keybit=(PKEY)&data[0];
keybit->b1=1; // вот так вот ты можешь добраться до битов
return 0;
}
Код:
typedef struct _KEY
{
char b1:1;
char b2:2;
char b3:3;
char b4:4;
char b5:5;
char b6:6;
char b7:7;
char b8:8;
} TKEY,*PKEY;
Выходит что b1 имеет 1 бит,b2 2 биты, b3 3 биты ..... b8 8 битов а всего 36 битов а должно быть всего лишь 8 битов, т.е. :
Код:
typedef struct _KEY {
char b1 : 1;
char b2 : 1;
char b3 : 1;
char b4 : 1;
char b5 : 1;
char b6 : 1;
char b7 : 1;
char b8 : 1;
} TKEY,*PKEY;
Последний раз редактировалось xismyname; 15.05.2009 в 12:58..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|