НАдеюсь и в этот раз мне помогут, нужно просчитать контрольную сумму

[ Версия для печати ]
Добавить в Telegram Добавить в Twitter Добавить в Вконтакте Добавить в Одноклассники
  ЗАКРЫТА [ НОВАЯ ТЕМА ]
ссср
21.09.2007 - 13:38
Статус: Offline


Я - РУССКИЙ !

Регистрация: 27.10.05
Сообщений: 612
0
Для преобразования кода карточек Виганд в формат кода Dallas TouchMemory необходимо дополнить код Виганд нулевыми битами до 7-ми байт и посчитать для них циклическую контрольную сумму:
8-й байт - CRC
5-7 байт - дополнение до 7-ми байт (00 00 00)
2-4 байт - код Вигант
1-й байт - 01

Т.е. на примере кода 011 55982 получается следующий код:
1-й байт – 01 (всегда 01 просто дополнение)
2-й байт – AE
3-й байт – DA (55982 - в шестнадцатеричной системе DAAE)
4-й байт - 0B (011 - в шестнадцатеричной системе 0B)
5-й байт = 6-й байт = 7-й байт = 00 (просто дополнение до 7-ми байт)
8-й байт = CRC = 0E Циклическая контрольная сумма


Циклическая контрольная сумма получается по правилу фирмы Dallas. Расчет осуществляется следующим образом:

CRCTable : array [0..255] of byte = (
0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,
157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,
35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,
190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,
70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,
219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,
101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,
248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,
140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,
17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,
175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,
50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,
202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,
87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,
233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,
116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53);

KeyCode: array[1..8] of byte;
KeyCode[ 8 ] := 0;

For j := 1 to 7 do
KeyCode[ 8 ] := CRCTable[ KeyCode[ 8 ] xor KeyCode[ j ] ];

Полученный 8-ми байтный код можно заносить в БД

ТАк вот задача научится правильно находить CRC для любого кода Виганд.

Вообщем не смог разораться sad.gif плиз помогите.
 
[^]
Yap
[x]



Продам слона

Регистрация: 10.12.04
Сообщений: 1488
 
[^]
ссср
21.09.2007 - 13:45
0
Статус: Offline


Я - РУССКИЙ !

Регистрация: 27.10.05
Сообщений: 612
затруднения именно в выражении
KeyCode[ 8 ] xor KeyCode[ j ] upset.gif why.gif

что такое xor понимаю. Но правильно все равно не высчитывается.

в итоге у них в выражении
KeyCode[ 8 ] xor KeyCode[ j ]
получается 10011111
но как?

вот еще есть
0E 00 00 00 0B DA AE 01
33 00 00 00 AC 08 7E 01
52 00 00 00 AC 08 80 01
04 00 00 00 AC 08 7F 01
верхний это из примера
задача из 7 бит получить 8 бит
через таблицу которая наверху

Это сообщение отредактировал ссср - 21.09.2007 - 13:58
 
[^]
ссср
21.09.2007 - 15:54
0
Статус: Offline


Я - РУССКИЙ !

Регистрация: 27.10.05
Сообщений: 612
Эх, что никто не поможет?
 
[^]
VuttelVult
21.09.2007 - 19:15
0
Статус: Offline


Хохмач

Регистрация: 4.11.05
Сообщений: 615
Цитата
что такое xor понимаю

gigi.gif
XOR это битовая логическая операция, а именно Исключающее ИЛИ.
пример:
1100
0110
-----
0110
И если ты этого не знал, считай, что ты не есть нормальный программер...

Добавлено в 19:28
Я лична ни даганяю, на ком языке паписан алгоритм, но походу это паскаль или делфи, но имхо для расписания алгоритмов больше всего подходит асм.

Ни паскаль, ни делфи ни знаю, но попытаюсь догадаццо.
Цитата
For j := 1 to 7 do KeyCode[ 8 ] := CRCTable[ KeyCode[ 8 ] xor KeyCode[ j ] ];

как я понимаю это цикл FOR, от 1 до 7.
На каждом шаге KeyCode[ 8 ] ксорится с KeyCode[ j ] (j на каждом шаге увеличивается) рассматривается как индекс в массиве CRCTable, значение в таблице CRCTable с таким индексом заносицца в KeyCode[ 8 ] .

хз, магу ашибаццо, ибо
Цитата
Ни паскаль, ни делфи ни знаю


Добавлено в 19:36
И ваше подай источник, и полное название алгоритма на англ. языке. У мня на компе зборка разных алгоритмов на разных языках, мож найдецца и этат.
 
[^]
Vile
22.09.2007 - 17:06
0
Статус: Offline


инспектор манежа

Регистрация: 12.05.04
Сообщений: 6802
pitAL
apoKALipsis
BobrinayaMorda
Sega

1х3, оффтоп
 
[^]
ссср
23.09.2007 - 22:03
0
Статус: Offline


Я - РУССКИЙ !

Регистрация: 27.10.05
Сообщений: 612
VuttelVult
Источник вот
http://www.bolid.ru/support/tech/faq/object/orion/?curPos=90
не меня одного данный вопрос интересует.
Цитата
XOR это битовая логическая операция, а именно Исключающее ИЛИ.пример:11000110-----0110И если ты этого не знал, считай, что ты не есть нормальный программер...


Я ни программер, однако что такое XOR вкурсе, вышку хорошо преподовали 4 года.

Цитата
как я понимаю это цикл FOR, от 1 до 7.На каждом шаге KeyCode[ 8 ] ксорится с KeyCode[ j ] (j на каждом шаге увеличивается) рассматривается как индекс в массиве CRCTable, значение в таблице CRCTable с таким индексом заносицца в KeyCode[ 8 ] .хз, магу ашибаццо, ибо


как я понял:

вообще это один из методов шифрования, но это так отступление.

Во первых распишем чему равныKeyCode[1], KeyCode[2], KeyCode[3], KeyCode[4], KeyCode[5], KeyCode[6], KeyCode[7], KeyCode[8]в нашем примере.

KeyCode[ 1 ] равно 01 в 16-ричной системе и равно 00000001 в двоичной;
KeyCode[ 2 ] равно AE в 16-ричной системе и равно 10101110 в двоичной;
KeyCode[ 3 ] равно DA в 16-ричной системе и равно 11011010 в двоичной;
KeyCode[ 4 ] равно 0B в 16-ричной системе и равно 00001011 в двоичной;
KeyCode[ 5 ] равно 00 в 16-ричной системе и равно 00000000 в двоичной;
KeyCode[ 6 ] равно 00 в 16-ричной системе и равно 00000000 в двоичной;
KeyCode[ 7 ] равно 00 в 16-ричной системе и равно 00000000 в двоичной;
KeyCode[ 8 ] равно 000000000 по условиям.



распишем цикл.

шаг 1.

00000000 (KeyCode[ 8 ])
xor
00000001 (KeyCode[ 1 ])
=
00000001

00000001 переводим из двоичной в десятиричную систему получаем 1, смотри что в таблице первому месту соответствует 94.
94 переводим в двоичную получаем 01011110, следовательно KeyCode[ 8 ] равно после первого шага 01011110

шаг 2.
01011110 (KeyCode[ 8 ])
xor
10101110 (KeyCode[ 2 ])
=
11110000 в десятиричной системе это 240, в таблице 240 соответсвует 246

246 в двоичной системе 11110110, следовательно KeyCode[ 8 ] равно 11110110

шаг 3.
11110110 (KeyCode[ 8 ])
xor
11011010 (KeyCode[ 3 ])
=
00101100 в десятиричной системе это 44, в таблице 44 соответсвует 93

93 в двоичной системе 01011101, следовательно KeyCode[ 8 ] равно 01011101

шаг 4.
01011101 (KeyCode[ 8 ])
xor
00001011 (KeyCode[ 4 ])
=
01010110 в десятиричной системе это 86, в таблице 86 соответсвует 186

186 в двоичной системе 10111010, следовательно KeyCode[ 8 ] равно 10111010

шаг 5.
10111010 (KeyCode[ 8 ])
xor
00000000 (KeyCode[ 5 ])
=
10111010 в десятиричной системе это 186, в таблице 186 соответсвует 240

шаг 6.
в таблице 240 соответсвует 246

шаг 7.
в таблице 246 соответсвует 21

21 в двоичной системе 00010101, в шеснадцатиричной 15, следовательно окончательный KeyCode[ 8 ] равно 15, а в примере ответ 0E, т.е. я где то ошибся, ГДЕ ИМЕННО ???

upset.gif why.gif

Это сообщение отредактировал ссср - 23.09.2007 - 22:14
 
[^]
VuttelVult
23.09.2007 - 22:28
0
Статус: Offline


Хохмач

Регистрация: 4.11.05
Сообщений: 615
ссср,
блин ну и задачку дал, я туд сижу и парюсь - каята фекня тожи выходит((

Добавлено в 22:36
у меня ваше 5 выходит upset.gif
 
[^]
ссср
23.09.2007 - 22:40
0
Статус: Offline


Я - РУССКИЙ !

Регистрация: 27.10.05
Сообщений: 612
VuttelVult
Цитата
Добавлено в 22:36 у меня ваше 5 выходит emo&:upset:endemo

ты обрати внимание что в таблице счет идет с 0 до 255, а то я тут ошибся пару раз в этом

Это сообщение отредактировал ссср - 23.09.2007 - 22:41
 
[^]
VuttelVult
23.09.2007 - 22:46
0
Статус: Offline


Хохмач

Регистрация: 4.11.05
Сообщений: 615
кста ты кагта индексы нитак используеш, напр. под индексом 240 - число 116

Добавлено в 22:48
Цитата
ты обрати внимание что в таблице счет идет с 0 до 255, а то я тут ошибся пару раз в этом

...блин апаздал ))

...думайу дальше

Добавлено в 22:54
у меня чуство что на сайте дали неправильный алгоритм

Добавлено в 23:02
РЕШИЛ!!!!
 
[^]
ссср
23.09.2007 - 23:08
0
Статус: Offline


Я - РУССКИЙ !

Регистрация: 27.10.05
Сообщений: 612
ну и говори
 
[^]
VuttelVult
23.09.2007 - 23:09
0
Статус: Offline


Хохмач

Регистрация: 4.11.05
Сообщений: 615
Тупасть, но:
На сайте ошибка. они десятичное 011 55982 неправильно перевели в 0B DA AE, на самом деле это 11 A3 8E, т.е. 2байт = 8E, третий = A3, четвертый = 11.
дальше по алгоритму и все ок!

Это сообщение отредактировал VuttelVult - 23.09.2007 - 23:09
 
[^]
VuttelVult
23.09.2007 - 23:13
0
Статус: Offline


Хохмач

Регистрация: 4.11.05
Сообщений: 615
вот на javascript по-быстрому
Цитата

CRCTable = new Array(0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53);
var KeyCode = new Array();
KeyCode[0] = 0;
KeyCode[1] = 0x01;
KeyCode[2] = 0x8E;
KeyCode[3] = 0xA3;
KeyCode[4] = 0x11;
KeyCode[5] = 0x00;
KeyCode[6] = 0x00;
KeyCode[7] = 0x00;
KeyCode[8] = 0x00;
for(j = 1; j <= 7; j ++ )
{i=KeyCode[8] ^ KeyCode[j];
  KeyCode[8] = CRCTable[i];
}
WScript.Echo(KeyCode[8].toString(16));
 
[^]
ссср
23.09.2007 - 23:14
0
Статус: Offline


Я - РУССКИЙ !

Регистрация: 27.10.05
Сообщений: 612
очень странно обычно должно было рассматриваться именно два разных числа.
ибо первое 011 код организации
а второе 55982 это номер карты

Добавлено в 23:15
можешь проверить к
даным
33 00 00 00 AC 08 7E 01
52 00 00 00 AC 08 80 01
04 00 00 00 AC 08 7F 01

?
 
[^]
VuttelVult
23.09.2007 - 23:16
0
Статус: Offline


Хохмач

Регистрация: 4.11.05
Сообщений: 615
ссср,
ну не знаю - у меня вышел пральный ответ rulez.gif
ЗЫ:магу риализавать алгоритм в проге, еси надо
 
[^]
ссср
23.09.2007 - 23:17
0
Статус: Offline


Я - РУССКИЙ !

Регистрация: 27.10.05
Сообщений: 612
если конечно не трудно.
Ибо, смотри выше, я не программер.

Это сообщение отредактировал ссср - 23.09.2007 - 23:19
 
[^]
VuttelVult
23.09.2007 - 23:20
0
Статус: Offline


Хохмач

Регистрация: 4.11.05
Сообщений: 615
Цитата
можешь проверить к даным
33 00 00 00 AC 08 7E 01
52 00 00 00 AC 08 80 01
04 00 00 00 AC 08 7F 01

все выходит! rulez.gif


Добавлено в 23:21
Цитата
Ибо, смотри выше, я не программер.

ок, я щас сбегаю в магазин, када вернусь напишу па-быринькаму agree.gif
 
[^]
ссср
23.09.2007 - 23:21
0
Статус: Offline


Я - РУССКИЙ !

Регистрация: 27.10.05
Сообщений: 612
ну ок тогда большое спасибо.agree.gif
бум писать в суппорт на сайт чтобы поправили

Это сообщение отредактировал ссср - 23.09.2007 - 23:22
 
[^]
VuttelVult
24.09.2007 - 00:17
0
Статус: Offline


Хохмач

Регистрация: 4.11.05
Сообщений: 615
тока пришол с магазина, па дароге знакомых встретил - пивка папили deg.gif
ща песать буду - пига есть rulez.gif .
 
[^]
ссср
24.09.2007 - 09:42
0
Статус: Offline


Я - РУССКИЙ !

Регистрация: 27.10.05
Сообщений: 612
VuttelVult
Видмио рано мы порадовались ибо не сходится.

И именно так должны раскладываться числа, как написанно в примере.

ДА даже если и делать все так как ты говоришь то все равно не сходится. sad.gif

ПЛИЗ ПОМОГИТЕ. pray.gif

Добавлено в 10:07
весь мозг уже вынес данный алгоритм

Это сообщение отредактировал ссср - 24.09.2007 - 10:06
 
[^]
VuttelVult
24.09.2007 - 18:24
0
Статус: Offline


Хохмач

Регистрация: 4.11.05
Сообщений: 615
Кароче вот написал РАБОЧИЙ скрипт на javascript http://68.72.97.154/crc.htm .

Заходиш на ту страницу, пишешь код карточки Виганд в шестнадцатиричном виде без пробелов и тебе выведет пральный ответ.

А на счет проги - ща меня нимного другая хуита ибет(пишу на асме простенькую прогу по созданию многопоточного сервера с помощью соксов).

Но потом напишу, добавлю возможность конвертировки по списку, сохранение в файел и т.д.

Воопшим дирзай http://68.72.97.154/crc.htm .

ЗЫ:сахрани ту страницу се на кампе, по я сервак тока на время включил.
 
[^]
ссср
24.09.2007 - 19:35
0
Статус: Offline


Я - РУССКИЙ !

Регистрация: 27.10.05
Сообщений: 612
спасибо ща буду еще раз проверять.

все работает
УРА bravo.gif pray.gif

Это сообщение отредактировал ссср - 24.09.2007 - 19:56
 
[^]
VuttelVult
24.09.2007 - 19:49
0
Статус: Offline


Хохмач

Регистрация: 4.11.05
Сообщений: 615
ссср,
ну что вышло?

Добавлено в 19:51
эта ты? gigi.gif
Цитата
GET /crc.htm HTTP/1.1
Accept: */*
Referer: http://www.yaplakal.com/forum32/st/0/topic152393.html
Accept-Language: ru
UA-CPU: x86
Accept-Encoding: gzip, deflate
If-Modified-Since: Mon, 24 Sep 2007 17:12:40 GMT
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)
Host: 68.72.97.154
Connection: Keep-Alive
 
[^]
ссср
24.09.2007 - 19:57
0
Статус: Offline


Я - РУССКИЙ !

Регистрация: 27.10.05
Сообщений: 612
Цитата
эта ты? emo&:gigigi:endemo


ага я
 
[^]
IlluvialSky
20.07.2012 - 20:01
0
Статус: Offline


Шутник

Регистрация: 20.07.12
Сообщений: 31
Может пригодится.


//Таблица CRC
$CRCTable = array (0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53);

//Серийный номер карты
$ASCIICode = "10195933";
//Код организации
$ACSIIHighBit = "155";
//Код карты
$ACSIILowBit = "37853";
//Все три параметра ввести обязательно для проверки ошибок при наборе номера карты
$err = 0;

//Перекрестная проверка правильности серийного номера и кодов организации и карты
if(substr(dechex($ASCIICode),0,2) == dechex($ACSIIHighBit))
$HEXHighBit=dechex($ACSIIHighBit);
else
$err=1;

if(substr(dechex($ASCIICode),-4) == dechex($ACSIILowBit))
$HEXLowBit=dechex($ACSIILowBit);
else
$err=1;

switch ($err)
{
case '1':
echo "Card number is incorrect";
exit;
break;
}

//Генерация HEX данных карты без CRC8 dallas
$FirstBit = "01";
$Code = "??000000".$HEXHighBit.$HEXLowBit.$FirstBit;

echo "You're card serial number is: ".$ASCIICode."<br>";
echo "You're organization code is: ".$ACSIIHighBit."<br>";
echo "You're number card is: ".$ACSIILowBit."<br><br>";
echo "Code in card (HEX): ".$Code."<br><br>";


$KeyCode = array();
//Деление по битам
for($i=1;$i<>(strlen($Code)/2)+1;$i++)
{
$KeyCode[$i] = hexdec(substr($Code,-$i*2,2));
}
//Сам процесс генерации CRC8 dallas
for($i=1;$i<>8;$i++)
{
echo "Step: ".$i.") ".$KeyCode[8]." = ".$KeyCode[8]." ^ ".$KeyCode[$i]." = [".($KeyCode[8] ^ $KeyCode[$i])."] => ".$CRCTable[$KeyCode[8] ^ $KeyCode[$i]]."<br>";
$KeyCode[8] = $CRCTable[$KeyCode[8] ^ $KeyCode[$i]];
}
$Result = dechex($KeyCode[8]);

echo "<br>CRC-8 dallas: ".$Result."<br>";
echo "Code in card (HEX) with CRC-8 dallas: ".$Result.substr($Code,-14)."

Это сообщение отредактировал Kott68 - 20.07.2012 - 21:27
 
[^]
Wik
20.07.2012 - 21:20
0
Статус: Offline


Ярила

Регистрация: 7.09.07
Сообщений: 1633
Археология интересная наука. Но за 5 лет у автора не возникло желания проблему поднять, значит стало не актуально. Тему закрываю.
 
[^]
Понравился пост? Еще больше интересного в Телеграм-канале ЯПлакалъ!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 7160
0 Пользователей:
ЗАКРЫТА [ НОВАЯ ТЕМА ]


 
 



Активные темы






Наверх