Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.14;
Скачать: CL | DM;

Вниз

Где найти информацию по контрольной сумме 8-бит XOR?   Найти похожие ветки 

 
INTAARI ©   (2003-06-27 12:33) [0]

Привет коллеги!!!
Немогу найти на просторах интернета вразумительное описание формирования и проверки контрольной суммы 8-бит XOR. Есть ли в дельфи функция для этих целей.


 
Digitman ©   (2003-06-27 12:48) [1]

результирующая_контр_сумма := 0
от i = 0 до всего_байт - 1 делать
результирующая_контр_сумма := результирующая_контр_сумма XOR i-й_байт;


 
INTAARI ©   (2003-06-27 13:21) [2]


> Digitman

Например если мне надо вычислить контрольную сумму строки в кодах ASCII, то я должен узнать байт сивола для применения функции XOR, я правильно понял.


 
Anatoly Podgoretsky ©   (2003-06-27 13:27) [3]

Не надо, прямо используй как указано в примере. Для строки это Byte(S[I])


 
Sha ©   (2003-06-27 13:31) [4]

Для больших объемов считают чуть иначе: XORят по 4 байта за раз в тип integer, а потом XORят байты результата. И не забыть приXORить хвост по mod 4.


 
Digitman ©   (2003-06-27 13:35) [5]


> я правильно понял .


ты правильно понял ?


 
Sha ©   (2003-06-27 13:40) [6]

Digitman © (27.06.03 13:35)
а я правильно понял? :}


 
mrcat ©   (2003-06-27 14:00) [7]

INTAARI © (27.06.03 12:33)

function CRC8(InB: Byte): Byte;
asm
PUSH EBX
PUSH ESI
XOR EBX, EBX
MOV DL, AL
MOV CL, 8
@@Calculate:
XOR AL, BH
MOV BL, AL
AND BL, 1
MOV AL, BH
TEST BL, 1
JNZ @@xorBit
@@xorBitRet:
SHR AL, 1
MOV ESI, EAX
MOV AL, BL
MOV CH, $80
MUL CH
ADD EAX, ESI
MOV BH, AL
MOV AL, DL
MOV BL, AL
AND BL, 1
SHR AL, 1
MOV ESI, EAX
MOV AL, BL
MOV CH, $80
MUL CH
ADD EAX, ESI
MOV DL, AL
DEC CL
JNZ @@Calculate
JMP @@Exit;
@@xorBit:
XOR AL, $18
JMP @@xorBitRet
@@Exit:
MOV AL, BH
POP ESI
POP EBX
end;


 
Sha ©   (2003-06-27 14:29) [8]

mrcat © (27.06.03 14:00)
не то


 
Anatoly Podgoretsky ©   (2003-06-27 15:19) [9]

Sha © (27.06.03 13:40)
А ты нет. Результат у тебя будет отличаться от принятого. Протокол подсчета контрольной суммы по модуля 2 (XOR) определен уже давно, подсчет побайтовый, результат передается в конце и последнее сложение должно давать результат 0 если нет ошибки, при количестве ошибок не более одной на бит.


 
vuk ©   (2003-06-27 15:55) [10]

Реализация простого 32-битного хеша. Немного иное, но для контроля целостности подойдет лучше.


function CalcHash( Data : pointer; DataSize : integer ) : integer;
register;
asm
push ebx
push esi
push edi
mov esi, Data
xor ebx, ebx { ebx will be hash }
or esi, esi { Data is nil? }
jz @@Exit
mov edx, DataSize {edx = length}
or edx,edx {length zero?}
jz @@Exit
xor ecx,ecx {ecx is shift counter}

@@Cycle:
xor eax,eax
mov al,[esi] {eax = data byte }
inc esi
rol eax,cl {rotate character}
xor ebx,eax {xor with hash}
inc ecx {increment shift counter (rol uses only bottom 5 bits)}
dec edx
jnz @@Cycle

@@Exit:
mov eax,ebx
pop edi
pop esi
pop ebx
end;


 
Sha ©   (2003-06-28 17:28) [11]

Удалено модератором
Примечание: Задай свой вопрос в отдельной ветке


 
Sha ©   (2003-06-28 19:18) [12]

Удалено модератором


 
Sha ©   (2003-06-28 19:26) [13]

Удалено модератором
Примечание: Отдохни три, не пиши


 
Sha ©   (2003-06-28 19:30) [14]

Удалено модератором


 
nikkie ©   (2003-06-28 20:07) [15]

очень плодотворная дискуссия :(

>Anatoly Podgoretsky
>Результат у тебя будет отличаться от принятого.
это почему же?


 
Novice ©   (2003-06-28 20:43) [16]

Узнал у алгоритм подсчета контрольной суммы 8-бит XOR у Sha:

function UpdateXOR8(Value: integer; Data: pointer; Len: integer): integer;
var
b: byte;
begin;
Result:=Value;
while Len>=4 do begin;
Result:=Result xor pinteger(Data)^;
inc(pinteger(Data));
dec(Len,4);
end;
Result:=Result xor (Result shr 16);
Result:=Result xor (Result shr 8);
b:=Result;
while Len>0 do begin;
b:=b xor pbyte(Data)^;
inc(pbyte(Data));
dec(Len);
end;
Result:=b;
end;

procedure TfrmAdmin.Button1Click(Sender: TObject);
var
s: string;
begin;
s:=Edit1.Text;
Caption:=(IntToStr(UpdateXOR8(0,pointer(s),length(s))));
end;


Вроде все верно. Чем вызван гнев модератора? :)



Страницы: 1 вся ветка

Текущий архив: 2003.07.14;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
14-44894
jack128
2003-06-26 20:33
2003.07.14
Ура!!!!!! Я - бакалавр!!!!!!!!!!!!!!


11-44621
nsvi
2002-11-07 15:32
2003.07.14
Как при множественном выборе файлов засунуть их список в ListBox?


7-44927
ND
2003-05-04 14:32
2003.07.14
Помогите удалить запись в реестре.


14-44849
Soft
2003-06-24 12:39
2003.07.14
Пусть это будет зваться любовью...


7-44928
_Andy
2003-04-29 13:08
2003.07.14
Частота монитора