Как обрабатывать растровые изображения ISO8583 с нешестнадцатеричными символами

Я пытаюсь правильно проанализировать сообщение ISO8583 (1987) в Python 3, используя пакет py8583. Столкнувшись с некоторыми проблемами с парсером, я понял, что растровое изображение в сообщении ISO8583, похоже, отформатировано неправильно.

Это растровое изображение ISO8583, о котором идет речь: P8P1211661684989

Это все сообщение ISO8583. Он использует данные проверки мусора, поэтому не нужно беспокоиться о конфиденциальной информации. NP0100P8P1211661684989300000000000002004914104019041104009904SHDPf406c431Cashier_01 01301001000200491665D9832B92FD380C

Насколько я понимаю, растровое изображение должно содержать только шестнадцатеричные символы 1-9/A-F, но, как вы видите, оно начинается с «P8P12...».

Есть ли что-то, что мне здесь не хватает? Эти сообщения ISO8583 в настоящее время используются в компаниях корпоративного уровня. Кроме того, в то время как некоторые онлайн-парсеры выдают ошибку растрового изображения, я нашел один, который, похоже, отлично его анализирует (ссылка ниже). Я не могу понять, как он делает синтаксический анализ.

http://www.fintrnmsgtool.com/decode-iso87-bitmap.html (Изменить: glhr правильно указал, что этот сайт не позволяет вам чтобы вводить нешестнадцатеричные символы, только копируйте/вставляйте их, так что, вероятно, это больше не имеет отношения к вопросу.)

Шестнадцатеричный дамп ниже:

0010   08 00 45 00 00 ab 03 b1 00 00 3c 06 fa 89 c0 a8
0020   15 02 40 87 69 e1 81 1c 0b bb b7 b9 78 55 c7 86
0030   4a 2c 50 18 12 24 2f d3 00 00 4e 50 00 00 00 7d
0040   30 31 30 30 50 38 00 01 80 c0 00 50 31 32 31 31
0050   36 36 31 36 38 34 39 38 39 33 30 30 30 30 30 30
0060   30 30 30 30 30 30 30 32 30 30 34 38 31 34 30 39
0070   35 39 31 39 30 34 31 31 30 34 30 30 39 39 30 34
0080   53 48 44 50 66 34 30 36 63 34 33 31 43 61 73 68
0090   69 65 72 5f 30 31 20 20 20 20 20 30 31 33 30 31
00a0   30 30 31 30 30 30 32 30 30 34 38 31 36 36 35 44
00b0   39 38 33 32 42 39 32 46 44 33 38 30 43

Любая помощь от экспертов ISO8583 будет принята с благодарностью!


person Kody458    schedule 17.04.2019    source источник
comment
Вы уверены, что P8P1211661684989 — это растровое изображение, а не поле данных? Вы увидите, что веб-сайт не позволяет вводить нешестнадцатеричные символы (хотя вы можете копировать и вставлять их).   -  person glhr    schedule 17.04.2019
comment
Хм, я бы так предположил. Я добавлю в сообщение все сообщение ISO8583 (это все тестовые данные, поэтому ничего конфиденциального не раскрывается). Из того, что я могу понять, NP — это заголовок, 4 цифры после него — это MTI, а затем должно быть растровое изображение.   -  person Kody458    schedule 17.04.2019
comment
Это не выглядит как допустимое сообщение ISO8583. Вы, вероятно, потеряли некоторые непечатаемые байты, когда отправили сообщение в виде строки ASCII. Предоставьте шестнадцатеричный дамп для этого примера сообщения.   -  person iso8583.info support    schedule 18.04.2019
comment
Добавлен шестнадцатеричный дамп, я сначала использовал Wireshark, чтобы попытаться прочитать его.   -  person Kody458    schedule 18.04.2019
comment
Википедия дает следующий загадочный комментарий: битовая карта может быть представлена ​​как 8 байтов двоичных данных или как 16 шестнадцатеричных символов (0-9, AF) в наборах символов ASCII или EBCDIC.   -  person Yves Daoust    schedule 18.04.2019


Ответы (1)


Что-то кажется не так.

Из шестнадцатеричного дампа это похоже на какое-то сетевое сообщение 0800. Это сделало бы растровое изображение, начинающееся с 0x45. Это будет двоичная битовая карта 0100 0101, указывающая на наличие битов 2, 6 и 8. ISO 8583 бит 2 всегда является PAN (номером карты), так что это не имеет особого смысла. Биты 6 и 8, похоже, не имеют смысла в контексте сетевого сообщения, так как первый является суммой счета держателя карты, а второй — комиссией за сумму держателя карты.

person user12265894    schedule 23.10.2019