Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Биты и байты в C++ B. (https://forum.antichat.xyz/showthread.php?t=120602)

Yazzer 14.05.2009 18:58

Биты и байты в C++ B.
 
Помогите вот с такой задачей в C++ B.

есть Ansi строка из 7-ми символов. То есть 7 байт.
Надо сделать её длинной в 8 байт, вставив в исходную строку нулевой бит через каждые 7 бит.

SmanxX1 14.05.2009 19:44

А в чем проблема то? И зачем это нужно, если не секрет?

Yazzer 14.05.2009 19:54

В том что я не понимаю как это сделать ))) Плохо понимаю как! )

А надо это для создания двух ключей для DES в алгоритме LM-хеширования.

slesh 14.05.2009 20:08

нулевой бит? Насколько я помню в DES этот бит нужен для того чтобы проверить точность ключа. т.е. этот бит ставится 1 когда кол-во 1-х битов нечетное и ставится =0 когда кол-во четное. (что не помню примерно так)
А вообще подобная вешь делается сдвигом на асме проще это делать.

Ra$cal 14.05.2009 20:11

// берешь исходный бит
int src_bit = src_char & 0x01;
// вставить нулевой бит
src_char <<= 1;

ну а дальше по обстоятельствам. можешь собирать перемещенные биты в новый чар
new_char |= src_char & 0x01;
new_char <<= 1;

Yazzer 14.05.2009 20:16

slesh
Я же пока только ключ делаю для DES шифрования. А для того что бы его сделать, мне надо из 7 байт сделать 8. как раз используя этот нулевой символ.

Надеюсь я вообще правильно понял алгоритм LM - хеша.

Yazzer 14.05.2009 20:19

Цитата:

Сообщение от Ra$cal
// берешь исходный бит
int src_bit = src_char & 0x01;
// вставить нулевой бит
src_char <<= 1;

ну а дальше по обстоятельствам. можешь собирать перемещенные биты в новый чар
new_char |= src_char & 0x01;
new_char <<= 1;



У меня Ansi строка 7 байт, как выбрать первые 7 бит, что бы туда вставить нулевой бит? И потом следующие 7 бит найти..

Yazzer 14.05.2009 20:21

И вот дополнительный вопрос который меня мучает.. Как потом из AnsiString с этим битовыми выражениями сделать ключ для DES типа "unsigned long"?

Ra$cal 14.05.2009 20:26

анси строка по сути своей можно привести к char*, т.е. к обычному массиву байтов. сначала получи массив символов. дальше с каждым байтом работаешь как с элементом массива. или я чего то не понимаю в условии?

slesh 14.05.2009 20:29

а вообще добирайся до битов через сишный возможности ти
Код:


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;
}



Время: 21:55