Здравствуйте! Выручайте пожалуйста! Не мог зайти на форум. Возникла проблема с шифрованием данных. Зашифровав в одном месте (в программе), не могу расшифровать в другом (в драйвере), и наоборот. Причем, зашифрованное программой, нормально читается другой. В драйвере вообще не получилось разобрать зашифрованное. Примеры алгоритмов шифрования/дешифрования (в программах) приведены в аттаче. Пытаюсь в драйвере зашифровать: /////// CRYPT_INFORMATION ka; UCHAR psrc[32],key[32]; CHAR keyl[]="123456789"; PCRYPT_DATA cd; union { DWORD32 devSect[4]; LARGE_INTEGER li; } sect; memset(§,0,sizeof(sect)); RtlCopyMemory(&key[0],&keyl[0],9); USHORT kt=2; ka.KeyType=kt; memset(&cd,0,sizeof(cd)); symmetric_key aes; CreateKey(&ka,key,9,&aes); sect.li.QuadPart = 0; RtlCopyMemory(psrc,&Data,sizeof(Data)); AESEncryptCBC(psrc,sizeof(Data),sect.devSect,&aes); status = ZwCreateFile(&FileHandle, FILE_APPEND_DATA, &objectAttributes, &IoStatus, 0, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_WRITE, FILE_OPEN_IF, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0); ZwWriteFile(FileHandle, NULL, NULL, NULL, &IoStatus, &psrc, sizeof(Data), NULL, NULL ); CloseDataFile(FileHandle); //////// Все функции шифрования точно такие же, как в программе, с теми же типами, etc. После этого программа не может расшифровать зашифрованное драйвером. Я думаю, что это я где-то напутал с типами данных. Судя по отладочным сообщениям, ключи в драйвере формируются как попало (непредсказуемо ). Так сделать, как в программе: PUCHAR key=NULL; .... key=(PUCHAR)&keyl; RtlCopyMemory(key,&keyl,9); ... не дает компилятор DDK, приходится так: RtlCopyMemory(&key[0],&keyl[0],9); Если ошибка именно здесь, а я все-таки думаю, что она здесь, подскажите, пожалуйста, как мне исправить приведение типов и заполнение переменной "Ключ" так, чтобы и заработало шифрование, и компилятор мне это все собрал.
Найди этот кусок в полученном драйвере (sys) и приведи здесь или проверь что делает RtlCopyMemory (это должна быть разверка в rep movsd + movsb) - в hiew или ida.
Если Вы о том, туда ли копируются данные, то, при выводе отладочного сообщения уже в функции создания ключа, пароль (123...) печатается верно, следовательно данные скопировались так как нужно. Найди этот кусок в полученном драйвере (sys) и приведи здесь или проверь что делает RtlCopyMemory (это должна быть разверка в rep movsd + movsb) - в hiew или ida. Сейчас, к сожалению, я не могу выполнить Вашу просьбу.
вот возьми для отладки вызывается так dump(device_extension->password.Buffer,KEYLENGTH); 158263201__src.rar
To staier Спасибо. Вот показали мне, что у меня инициализационный вектор в функциях шифрования и дешифрования имеет разный размер, так как алгоритм шифрования я копировал, то этого не заметил. В функции шифрования, - ULONG32 iv[4]; дешифрования, - ULONG32 iv[8]; Может ли это быть корнем проблемы? И еще мне посоветовали попробовать задать конкретные значения данному вектору. Кто по этому поводу может чего сказать (я сейчас не могу проверить).
Выкладываю пример шифрующего и дешифрующего драйверов. Один должен записать шифрованные данные в файл, другой, - расшифровать и вывести отладочным сообщением содержимое файла. Расшифровать не получается. Посмотрите, пожалуйста, где содержится ошибка. Если можно, подскажите как ее исправить, чтобы обмен шифрованными данными проходил нормально.