Форум: "Потрепаться";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];
ВнизГде найти информацию по контрольной сумме 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.03 c