Как посчитать контрольную сумму hex: вычислить контрольную сумму hex в Python 3

Содержание

CRC — прога для вычисления контрольной суммы — Программы

уважаемые господа программисты..если кого-то из вас не затруднит ,напишите пожалуйста прогу для вычисления контрольной суммы в строчке из кода прошивки гуми (чтобы я, допустим, мог вставить строчку в поле, а прога бы считала мне контрольную сумму)..очень нужно..очень надоело уже считать вручную…а вот алгоритм вычисления это контрольной суммы:

 

Например, вот строчка:

S31500020120 6C0160C2042F86F22F8601034CF2A920 CD

..где CD — это та самая контрольная сумма…..

Для начала запустите программу Калькулятор, которая есть в любой версии Windows, в расширенном режиме, чтобы удобно было переключаться из десятичной системы в шестнадцатеричную и вооружитесь обычным текстовым редактором, подойдет к примеру встроенный в FAR редактор. Затем действуйте следующим образом: сложите в шестнадцатеричной системе поля адреса, данных и после этого прибавьте к этому значению шестнадцатеричную длину этих полей в байтах — 15. Вот пример подсчета контрольной суммы для приведенной выше строчки:

 

 

15+00+02+01+20

 

+

 

6C+01+60+C2+04+2F+86+F2+2F+86+01+03+4C+F2+A9+20

 

=

 

632 в шестнадцатеричной системе

 

 

Теперь о том, что нужно делать с полученным результатом. Если посмотреть на поле контрольной суммы, то можно увидеть, что под нее отведен один байт, а значение одного байта не может превышать 255, или FF в шестнадцатеричной системе. Так вот, чтобы просчитать значение контрольной суммы для нашей строки, следует в шестнадцатеричной системе отнять полученное нами значение при сложении от FF. Но если перевести 632 в десятичную систему, то получится число 1586, разумеется при вычитании у нас выйдет отрицательное значение, а это недопустимо. Поэтому в этом случае следует отбросить одну цифру слева, чтобы получилось значение меньше FF — 255 в десятичной системе. Отбросили — получилось число 32. Значит теперь в шестнадцатеричной системе производим вычитание: FF — 32 = CD. Вот CD и будет искомой контрольной суммой для нашей строки.

Сами видите, что геммороя много…а когда этого надо сделать много, то хоть вешайся вообще…заранее спасибо!!!

Контрольные суммы панелей VDO • CHIPTUNER.RU

Контрольные суммы панелей VDO

©ide16rus & vano11. 18.03.2010

Данная статья написана в помощь желающим настроить приборную панель под себя и свою машину владельцем легендарной машины от нашего автопрома, автомобиля ОКА с одноокошечной приборной панелью VDO 2110 ver. 1.1.

Речь в данной статье пойдет о «старых» приборных панелях VDO 2110 и 2115 версии 1.1 с сервисным разъемом (3‑мя пятачками) и о новой панели версии 1.6 без сервисного разъема. Маркировка этой панели vdo21150-3801010 – 04 (обратите внимание на этот нолик).

Началось все со статьи «Исследование дампа VDO» и появившемся после прочтения остром желании заняться полной адаптацией панели к своему автомобилю. В статье, указанной выше, заявляется, что контрольная сумма (далее по тексту – КС) в дампе не имеет значения для полноценной работы панели. Но данное утверждение верно лишь для панели версии 0.8, которая действительно, не требовала пересчета КС при изменении содержимого дампа. Т.к статья была написана в 2004 г., когда не существовало других версий панелей, то появилась необходимость дополнить данный материал нашими исследованиями содержимого дампов VDO ver. 1.1 и ver. 1.6.

Контрольная сумма для ver.1.1 находится поадресу 6F и контролирует диапазон адресов от 18h до 6Eh (все XOR+1). Правка любых значений тарировочных таблиц приборов без пересчета КС приводила к неработоспоcобности спидометра, при этом общий и суточный пробег (одометр) продолжают работать.

В дампе панели ver. 1.6 (без пятачков для программирования, ее можно прошивать через K‑Line адаптер, через 2 пин красной колодки, только первая строка с пробегом не доступна для правки) находится две КС, каждая из которых «контролирует» свой блок данных.

КС‑1 находится по адресу 17h – контрольная сумма блока 10h-016h (все XOR +1)
КС‑2 находится по адресу 9Dh – контрольная сумма блока 18h-09Сh (все XOR +1)

Если КС‑2 не правильная, перестает работать спидометр и термометр. В ошибках панели появляется 1 – ошибка микроконтроллера (eeprom).
Если КС‑1 не правильная, дополнительно перестает работать еще и второе окно с часами.

Так же выявлено различие дампа для а/м «Ока» от дампа аналогичной панели «старшего, 4‑х цилиндрогого, брата».

По адресам 30h и 31h (для ver.1.1) или 32h и 33h (для ver.1.6) содержит:

D0h и 07h (2000) – для 4 цилиндров;
E8h и 03h (1000) – для 2 цилиндров;

2000 в десятичной =7D0 в шестнадцатеричной с swap в байте =D0,07
1000 в десятичной =3E8 в шестнадцатеричной с свап_ом в байте =E8,03 

 

Калькулятор КС (контрольных сумм) для панелей VDO версии 1.1 и 1.6

В процессе «доисследования» дампа для облегчения жизни был написан калькулятор для проверки и пересчета КС, который и предлагается Вашему вниманию. Автор калькулятора Дмитрий Ионов (aka ide16rus) г.Казань.

Интерфейс программы очень простой и интуитивно-понятный.

Как работать с программой.

Программа контролирует длину файла дампа, допустимой длиной может быть 128 или 256 байт, если длина файла не равна указанным, выдается окно предупреждения и файл не обрабатывается. Находясь в вкладке VDO v1.1 можно открыть файл дампа VDO v1.6, вкладка сама переключится на VDO v1.6, также и наоборот (контролируется длина файла).

Выбранный файл обрабатывается и выводятся КС расчетная и КС из файла, файл не держится открытым, освобождается, о чем говорит сообщение в нижней строке программы «Файл освобожден». Это сделано для возможности открыть этот освобожденный файл в Hex редакторе и правки, после сохранения изменений в Hex редакторе, достаточно нажать в программе кнопку «Пересчитать» и файл будет обработан повторно.

Если  КС расчетная не совпадает с КС из файла то она красного цвета, если совпадает, зеленого.
Если  КС расчетная не совпадает с КС из файла дампа Вы можете исправить это через меню Файл «Записать значения КС в файл»

Скачать калькулятор.

За подробностями обращайтесь на форум сайта http://smallcar.ru

Ссылка авторской темы на форуме smallcar.ru: «Исследование дампа VDO»

Ссылка авторской темы  на форуме smallcar.ru: «Мурзилка-как прошить приборную панель VDO»

 

Редактируемый серийный номер PIC в файле HEX

Специально для решения вопроса о привязке переменных к определенным адресам во флэш-памяти на PIC18 с помощью компилятора C18, пожалуйста, обратитесь к разделу «Прагмы» в hlpC18ug.chm в каталоге doc, где установлен компилятор.

Для этого вам нужно определить новый «раздел» в памяти и привязать его к начальному адресу, чтобы

#pragma romdata serial_no_section=0x1700

Это создает новый раздел с именем «serial_no_section», который начинается с адреса 0x1700 во флэш-памяти (программе) (поскольку мы определили «romdata» в #pragma).

Сразу после строки #pragma определите вашу переменную (и) так:

#pragma romdata serial_no_section=0x1700
const rom int mySerialNumber = 0x1234;
#pragma romdata

Теперь у вас есть 0x12 по адресу 0x1700 и 0x34 по адресу 0x1701 в памяти (потому что PIC18 использует модель с прямым порядком байтов). «Const rom» гарантирует, что компилятор знает, что это тип переменной const, и что переменная находится в памяти «rom» и, следовательно, должна быть доступна с помощью инструкций чтения таблиц.

Последний #pragma romdataоператор гарантирует, что любые последующие объявления переменных связаны с разделами памяти по умолчанию, так как компоновщик считает, что подходит, а не следует в разделе «serial_no_section».

Теперь весь код может просто ссылаться на переменную «mySerialNumber», и вы точно знаете, по какому адресу находится серийный номер в памяти.

Редактирование кода HEX может быть немного сложным, так как вам нужно вычислить контрольную сумму для каждой строки, которую вы редактируете. Я работаю над классом C ++ для декодирования и кодирования файлов Intel HEX, что должно сделать это проще, но это еще не закончено. Декодирование файлов работает, кодирование снова еще не реализовано. Проект (если вы заинтересованы) находится здесь https://github.com/codinghead/Intel-HEX-Class

Надеюсь это поможет

Как создать адрес биткоин-кошелька с помощью закрытого ключа

Открытый ключ

Как только мы закончили с ECDSA, все, что нам нужно сделать, это добавить байт 0x04 в начале нашего открытого ключа. В результате мы получаем полный открытый ключ биткоина, который выглядит следующим образом:

041e7bcc70c72770dbb72fea022e8a6d07f814d2ebe4de9ae3f7af75bf706902a7b73ff919898c836396a6b0c96812c3213b99372050853bd1678da0ead14487d7

Сжатый открытый ключ

Но мы можем сделать лучше. Как вы помните, открытый ключ является некоторой точкой (X, Y) на кривой. Мы знаем кривую, и для каждого X есть только два Ys, которые определяют точку, которая лежит на этой кривой. Так зачем хранить Y? Вместо этого, давайте сохраним X и знак Y. Позже мы можем вернуть Y, если в этом будет необходимость.

Особенности заключаются в следующем: мы берем X из открытого ключа ECDSA. Теперь, мы добавим 0x02, если последний байт Y четный, и байт 0x03, если последний байт нечетный.

В нашем случае последний байт нечетный, поэтому мы добавляем 0x03, чтобы получить сжатый открытый ключ:

031e7bcc70c72770dbb72fea022e8a6d07f814d2ebe4de9ae3f7af75bf706902a7

Этот ключ содержит ту же информацию, но он почти в два раза короче, чем несжатый ключ. Клево!

Раньше программное обеспечение кошельков использовало длинные, полные версии открытых ключей, но теперь большинство из них перешло на сжатые ключи.

Шифрование открытого ключа

Теперь нам нужно сгенерировать адрес кошелька. Какой бы метод генерирования открытого ключа вы ни выбрали, он проходит ту же процедуру. Очевидно, что адреса будут отличаться. В этой статье мы рассмотрим сжатую версию.

Здесь нам нужно применить SHA-256 к открытому ключу, а затем применить RIPEMD-160 к результату. Порядок очень важен.

SHA-256 и RIPEMD-160 являются двумя хэш-функциями, и опять же, мы не будем вдаваться в детали того, как они работают.

Важно то, что теперь у нас есть 160-битное целое число, которое будет использоваться для дальнейших модификаций. Назовем это зашифрованным открытым ключом. Для нашего примера, зашифрованный открытый ключ – это 453233600a96384bb8d73d400984117ac84d7e8b

Зашифрованный открытый ключ = RIPEMD-160 (SHA-256 (Открытый ключ))

Вот как мы шифруем открытый ключ в Python:

public_key_bytes = codecs.decode(public_key, ‘hex’)
# Run SHA-256 for the public key
sha256_bpk = hashlib.sha256(public_key_bytes)
sha256_bpk_digest = sha256_bpk.digest()
# Run RIPEMD-160 for the SHA-256
ripemd160_bpk = hashlib.new(‘ripemd160’)
ripemd160_bpk.update(sha256_bpk_digest)
ripemd160_bpk_digest = ripemd160_bpk.digest()
ripemd160_bpk_hex = codecs.encode(ripemd160_bpk_digest, ‘hex’)

Добавление сетевого байта

Биткоин имеет две сети, основную и тестовую. Основной сетью является сеть, которую все люди используют для перевода монет. Тестовая сеть была создана, как вы уже догадались, для тестирования новых функций и программного обеспечения.
Мы хотим создать адрес для использования его в основной сети, поэтому нам нужно добавить 0x00 к зашифрованному открытому ключу. Результат 00453233600a96384bb8d73d400984117ac84d7e8b. Для тестовой сети это будет 0x6f.

Контрольная сумма

Теперь нам нужно рассчитать контрольную сумму для нашего ключа в основной сети. Идея контрольной суммы состоит в том, чтобы убедиться, что данные (в нашем случае, ключ) не были повреждены во время передачи. Программное обеспечение кошелька должно ориентироваться на контрольную сумму и отмечать адрес как недопустимый, если контрольная сумма не соответствует заявленной.

Чтобы вычислить контрольную сумму ключа, нам нужно применить SHA-256 дважды, а затем взять первые 4 байта результата. В нашем примере двойной SHA-256 — это 512f43c48517a75e58a7ec4c554ecd1a8f9603c891b46325006abf39c5c6b995, и поэтому контрольная сумма 512f43c4 (обратите внимание, что 4 байта составляют 8 шестнадцатеричных цифр).


С = SHA-256 (SHA-256 (зашифрованный открытый ключ основной сети))

Контрольная сумма = первые 4 байта С

Для расчета контрольной суммы адреса используется следующий код:

# Double SHA256 to get checksum
sha256_nbpk = hashlib.sha256(network_bitcoin_public_key_bytes)
sha256_nbpk_digest = sha256_nbpk.digest()
sha256_2_nbpk = hashlib.sha256(sha256_nbpk_digest)
sha256_2_nbpk_digest = sha256_2_nbpk.digest()
sha256_2_hex = codecs.encode(sha256_2_nbpk_digest, ‘hex’)
checksum = sha256_2_hex[:8]

Получение адреса

Наконец, чтобы получить адрес, мы просто объединяем ключ основной сети и контрольную сумму. В нашем случае это выглядит так: 00453233600a96384bb8d73d400984117ac84d7e8b512f43c4

Вот и все! Это адрес кошелька для закрытого ключа, приведенного в начале статьи.

Но вы можете заметить, что что-то не так. Вы, вероятно, уже встречали биткоин-адреса, и они не выглядели так. Ну, причина в том, что они кодируются с помощью Base58 (вариант кодирования цифрового кода в виде буквенно-цифрового текста на основе латинского алфавита. Алфавит кодирования содержит 58 символов). Это немного странно.

Вот алгоритм для преобразования шестнадцатеричного адреса в адрес Base58:

def base58(address_hex):
    alphabet = ‘123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz’
    b58_string = ‘’
    # Get the number of leading zeros
    leading_zeros = len(address_hex) — len(address_hex.lstrip(‘0’))
    # Convert hex to decimal
    address_int = int(address_hex, 16)
    # Append digits to the start of string
    while address_int > 0:
        digit = address_int % 58
        digit_char = alphabet[digit]
        b58_string = digit_char + b58_string
        address_int //= 58
    # Add ‘1’ for each 2 leading zeros
    ones = leading_zeros // 2
    for one in range(ones):
        b58_string = ‘1’ + b58_string
    return b58_string

Мы получаем 17JsmEygbbEUEpvt4PFtYaTeSqfb9ki1F1, сжатый адрес биткоин-кошелька.

Шестнадцатеричный адрес = зашифрованный открытый ключ основной сети + адрес контрольной суммы = Base58 (Шестнадцатеричный адрес)

Вывод

Процесс генерации ключей кошелька можно разделить на четыре этапа:

  • создание открытого ключа с помощью ECDSA
  • шифрование ключа с помощью SHA-256 и RIPEMD-160
  • расчет контрольной суммы с помощью двойной SHA-256
  • кодирование ключа с помощью Base58.

В зависимости от формы открытого ключа (полный или сжатый), мы получаем разные адреса, но оба совершенно допустимы.

Вот полный алгоритм для несжатого открытого ключа:

Эллиптический открытый ключ = ECDSA (закрытый ключ)
Открытый ключ = 0х04 + эллиптический открытый ключ
Зашифрованный открытый ключ = RIPEMD-160 (SHA-256 (открытый ключ))
Зашифрованный открытый ключ основной сети = 0х00 + Зашифрованный открытый ключ
С = SHA-256 (SHA-256 (Зашифрованный открытый ключ основной сети))
Контрольная сумма = первые 4 байта С
Шестнадцатеричный адрес = Зашифрованный открытый ключ основной сети + Контрольная сумма
Адрес = Base58 (Шестнадцатеричный адрес)

Если вы хотите «поиграть» с кодом, я опубликовал его на GitHub.

Я делаю обзор о криптовалютах на Medium. Первая часть – подробное описание блокчейна.

Checksum / Приложение для вычисления и проверки контрольной суммы файлов

Checksum — небольшое Qt графическое приложение для вычисления (хеширования / hashing) и проверки контрольной суммы файлов (checksums).

Хеширование (hashing) — преобразование входного массива данных произвольной длинны, в выходную битовую строку фиксированной длинны. Такие преобразования так же называют хеш-функциями свёртки, а их результаты называют хешем, хеш-кодом или дайджестом сообщения.

Контрольная сумма — рассчитанное путём применения заданным алгоритмом значение, используемое для проверки целостности данных при их передаче и хранении. Так же может быть использована для сравнения двух наборов данных на неэквивалентность (с большой вероятностью различные наборы данных будут иметь неравные контрольные суммы).

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

Checksum поддерживает как одиночное, так и «массовое» хеширование (всех файлов из заданного каталога, включая подкаталоги, опционально) используя алгоритмы MD5 (128-битный алгоритм хеширования), MD4 (предшественник MD5) и SHA1 (алгоритм генерирует 160-битное хеш-значение).

Checksum вычисляет контрольные суммы в фоновом режиме (для одного или для всех добавленных файлов), поддерживает функцию «Перетащи и брось» (drap-and-drop) из файлового менеджера на окно приложения, интегрируется с буфером обмена (контрольная сумма автоматически вставляется в диалог сравнения), управление приложением с помощью мыши и/или клавиатурными сочетаниями.

Лицензия: DWTFYW

Страница на opendesktop.org

python — Контрольная сумма CRC32 в Python с шестнадцатеричным вводом

Я хочу вычислить контрольную сумму CRC32 строки шестнадцатеричных значений в Python. Я обнаружил zlib.crc32 (данные) и binascii.crc32 (данные), но во всех примерах, которые я обнаружил с помощью этих функций, в качестве строки есть «данные» (например, «привет»). Я хочу передать шестнадцатеричные значения в качестве данных и найти контрольную сумму. Я попытался установить данные как шестнадцатеричное значение (например, 0x18329a7e), и я получил TypeError: должен быть строкой или буфером, а не int. Функция вычисляет, когда я делаю шестнадцатеричное значение строкой (например, «0x18329a7e»), но я не думаю, что она вычисляет правильную контрольную сумму. Любая помощь будет оценена. Благодарность!

4

dmranck 5 Апр 2011 в 23:15

3 ответа

Лучший ответ

Я думаю, что вы ищете binascii.a2b_hex():

>>> binascii.crc32(binascii.a2b_hex('18329a7e'))
-1357533383

12

Andrew Clark 5 Апр 2011 в 19:51

Попробуйте преобразовать список шестнадцатеричных значений в строку:

t = ['\x18', '\x32', '\x9a', '\x7e']
chksum = binascii.crc32(str(t))

0

sizzzzlerz 5 Апр 2011 в 19:41

>>> import struct,binascii
>>> ncrc = lambda numVal: binascii.crc32(struct.pack('!I', numVal))
>>> ncrc(0x18329a7e)
-1357533383

1

phihag 5 Апр 2011 в 19:49

5557214

Как вычислить контрольную сумму crc32 из строки в linux bash — bash

Я сам столкнулся с этой проблемой, и я не хотел идти на «хлопот» по установке crc32. Я придумал это, и хотя он немного противен, он должен работать на большинстве платформ или в большинстве современных Linux.

echo -n "LongString" | gzip -c | tail -c8 | hexdump -n4 -e '"%u"'

Чтобы предоставить некоторые технические подробности, gzip использует crc32 в последних 8 байтах, а опция -c выводит на стандартный вывод, а tail выдает последние 8 байтов.

hexdump был немного сложнее, и мне пришлось некоторое время обсуждать это с ним, прежде чем я придумал что-то удовлетворительное, но формат здесь, похоже, правильно разобрал gzip crc32 как одно 32-битное число:

  • -n4 принимает только соответствующие первые 4 байта нижнего колонтитула gzip.
  • '"%u"' — ваша стандартная строка форматирования fprintf, которая форматирует байты как одно неподписанное 32-битное целое число. Обратите внимание, что здесь есть двойные кавычки, вложенные в одинарные кавычки.

Если вам нужна шестнадцатеричная контрольная сумма, вы можете изменить строку формата на '"%08x"' (или '"%08X"' для верхнего регистра hex), который будет отформатировать контрольную сумму как 8 символов (0 дополненных) шестнадцатеричных чисел.

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

Слабая точка здесь для кросс-платформенной юзабилити, вероятно, является конфигурацией hexdump, так как я видел вариации на ней с платформы на платформу, и это немного нерешительно. Я бы предложил, если вы используете это, вы должны попробовать некоторые тестовые значения и сравнить с результатами онлайн-инструмента.

Расчет и проверка контрольных сумм

Для вычисления контрольной суммы кадра API:

  1. Добавить все байты пакета, кроме начального разделителя 0x7E и длины (второго и третьего байта).
  2. Оставить в результате только 8 младших бит.
  3. Вычтите это количество из 0xFF.

Для проверки контрольной суммы кадра API:

  1. Сложить все байты, включая контрольную сумму; не включайте разделитель и длину.
  2. Если контрольная сумма верна, последние две цифры справа от суммы равны 0xFF.

Пример

Рассмотрим следующий пример пакета данных: 7E 00 08 08 01 4E 49 58 42 45 45 3B

7E Начальный разделитель
00 08 Длина байтов
08 Идентификатор API
01 Идентификатор кадра API
4E 49 AT-команда
58 42 45 45 Значение параметра
3B Контрольная сумма

Для вычисления контрольной суммы вы складываете все байты пакета, исключая разделитель кадра 7E и длину (второй и третий байты):

7E 00 08 08 01 4E 49 58 42 45 45 3B

Добавьте эти шестнадцатеричные байты:

0x08 + 0x01 + 0x4E + 0x49 + 0x58 + 0x42 + 0x45 + 0x45 = 0x01C4

Теперь возьмите результат 0x01C4 и оставьте только 8 младших битов, которые в этом примере равны 0xC4 (две крайние правые цифры).Вычтите 0xC4 из 0xFF, и вы получите 0x3B (0xFF — 0xC4 = 0x3B). 0x3B — контрольная сумма для этого пакета данных.

Если пакет данных API составлен с неверной контрольной суммой, RF-модуль XBee / XBee-PRO Zigbee сочтет этот пакет недействительным и проигнорирует данные.

Чтобы проверить контрольную сумму пакета API, добавьте все байты, включая контрольную сумму (не включая разделитель и длину), и, если они верны, последние две крайние правые цифры суммы будут равны FF.

0x08 + 0x01 + 0x4E + 0x49 + 0x58 + 0x42 + 0x45 + 0x45 + 0x3B = 0x01FF

ОБЩЕЕ: формат файла Intel HEX

Главная / Техническая поддержка

Информация в этой статье относится к:

  • Keil MDK Все версии
  • C166 Все версии
  • C251 Все версии
  • C51 Все версии

ВОПРОС

Что такое формат файлов Intel HEX?

ОТВЕТ

Файл Intel HEX — это текстовый файл ASCII со строками текста, которые следуйте файловому формату Intel HEX.Каждая строка в файле Intel HEX содержит одну HEX-запись. Эти записи состоят из шестнадцатеричного числа, представляющие машинный код и / или постоянные данные. Файлы Intel HEX часто используются для передачи программы и данных, которые будет храниться в ПЗУ или СППЗУ. Большинство программистов EPROM или эмуляторы могут использовать файлы Intel HEX.

Формат записи

Файл Intel HEX состоит из любого количества записей HEX. Каждый запись состоит из пяти полей, которые расположены следующим образом формат:

 : llaaaatt [дд...] cc 
 

Каждая группа букв соответствует отдельному полю, и каждая Буква представляет собой единственную шестнадцатеричную цифру. Каждое поле составлено не менее двух шестнадцатеричных цифр, составляющих байт, как описано ниже:

  • : — это двоеточие, с которого начинается каждый Intel HEX записывать.
  • ll это поле длины записи, которое представляет количество байтов данных ( dd ) в записи.
  • аааа это адрес поле, представляющее начальный адрес для последующих данных в запись.
  • тт это поле, представляющее тип записи HEX, который может быть одним из следующего:
    00 — запись данных
    01 — запись конца файла
    02 — запись адреса расширенного сегмента
    04 — запись расширенного линейного адреса
    05 — запись начального линейного адреса ( МДК-АРМ Только)
  • дд это поле данных, представляющее один байт данных.Запись может иметь несколько байтов данных. Количество байтов данных в записи должно соответствует номеру, указанному в поле ll .
  • cc поле контрольной суммы, представляющее контрольную сумму записи. Контрольная сумма вычисляется путем суммирования значений всех шестнадцатеричных пары цифр в записи по модулю 256 и взяв двойку дополнение.
Записи данных

Файл Intel HEX состоит из любого количества записей данных, которые завершаются возвратом каретки и переводом строки.Записи данных выглядят следующим образом:

 : 10246200464C5549442050524F46494C4500464C33 
 

Эта запись расшифровывается следующим образом:

 : 10246200464C5549442050524F46494C4500464C33
||||||||||| CC-> Контрольная сумма
||||||||| DD-> Данные
||||||| TT-> Тип записи
||| AAAA-> Адрес
| LL-> Длина записи
: -> Двоеточие 
 

где:

  • 10 — количество байтов данных в записывать.
  • 2462 — это адрес, по которому данные должны быть находится в памяти.
  • 00 — это тип записи 00 (запись данных).
  • 464C … 464C — это данные.
  • 33 — контрольная сумма записи.
Расширенная линейная Адресные записи (HEX386)

Записи расширенного линейного адреса также известны как 32-битный адрес. записи и записи HEX386.Эти записи содержат старшие 16 бит (биты 16-31) адреса данных. Расширенная линейная адресная запись всегда имеет два байта данных и выглядит следующим образом:

 : 02000004FFFFFC 
 

где:

  • 02 — количество байтов данных в записывать.
  • 0000 — это адресное поле. Для расширенного запись линейного адреса, это поле всегда 0000.
  • 04 — тип записи 04 (расширенный линейный адресная запись).
  • FFFF — старшие 16 бит адреса.
  • FC — контрольная сумма записи, рассчитывается как
    01h + NOT (02h + 00h + 00h + 04h + FFh + FFh).

При чтении расширенной линейной адресной записи расширенный линейный адрес, хранящийся в поле данных, сохраняется и применяется к последующие записи читаются из файла Intel HEX.Линейный адрес остается в силе до тех пор, пока не будет изменен другим расширенным адресом записывать.

Адрес абсолютной памяти записи данных получается добавлением адресное поле в записи на смещенные адресные данные из расширенная линейная адресная запись. Следующий пример иллюстрирует этот процесс ..

  Адрес из адресного поля записи данных 2462
Поле данных расширенной линейной записи адреса FFFF
                                              --------
Адрес абсолютной памяти FFFF2462 
 
Расширенный сегмент Адресные записи (HEX86)

Записи расширенного сегмента, также известные как HEX86 записи — содержат биты 4-19 сегмента адреса данных.Расширенный запись адреса сегмента всегда имеет два байта данных и отображается как следует:

 : 020000021200EA 
 

где:

  • 02 — количество байтов данных в записывать.
  • 0000 — это адресное поле. Для расширенного запись адреса сегмента, это поле всегда 0000.
  • 02 — тип записи 02 (расширенный сегмент адресная запись).
  • 1200 — сегмент адреса.
  • EA — контрольная сумма записи и рассчитывается как
    01ч + НЕ (02ч + 00ч + 00ч + 02ч + 12ч + 00ч).

При чтении записи адреса расширенного сегмента расширенный адрес сегмента, хранящийся в поле данных, сохраняется и применяется к последующие записи читаются из файла Intel HEX. Адрес сегмента остается в силе до тех пор, пока не будет изменен другим расширенным адресом записывать.

Адрес абсолютной памяти записи данных получается добавлением поле адреса в записи к данным смещенного адреса из запись адреса расширенного сегмента. Следующий пример иллюстрирует этот процесс.

  Адрес из адресного поля записи данных 2462
Поле данных 1200 записи адреса расширенного сегмента
                                             --------
Абсолютный адрес памяти 00014462 
 
Начальный линейный Адресные записи (только MDK-ARM)

Записи начального линейного адреса определяют начальный адрес заявление.Эти записи содержат полный линейный 32-битный адрес. Запись начального линейного адреса всегда имеет четыре байта данных и выглядит следующим образом:

 : 04000005000000CD2A 
 

где:

  • 04 — количество байтов данных в записывать.
  • 0000 — это адресное поле. Для начала запись линейного адреса, это поле всегда 0000.
  • 05 — тип записи 05 (начальная линейная адресная запись).
  • 000000CD — 4-байтовый линейный начальный адрес приложение.
  • 2A — контрольная сумма записи, рассчитывается как
    01ч + НЕ (04ч + 00ч + 00ч + 05ч + 00ч + 00ч + 00ч + CDh).

Начальный линейный адрес указывает адрес __main (pre-main), но не адрес кода запуска, который обычно вызывает __main после вызова SystemInit ().Странное линейное начало адрес указывает, что __main скомпилирован для инструкции Thumb набор.

Запись начального линейного адреса может располагаться в любом месте шестнадцатеричного файла. В большинстве случаев эту запись можно игнорировать, потому что она не содержит информация, необходимая для программирования флэш-памяти.

Записи о конце файла (EOF)

Файл Intel HEX должен заканчиваться записью конца файла (EOF). Этот запись должна иметь значение 01 в поле типа записи.Запись EOF всегда выглядит следующим образом:

 : 00000001FF 
 

где:

  • 00 — количество байтов данных в записывать.
  • 0000 — это адрес, по которому данные должны быть находится в памяти. Адрес в записях конца файла: бессмысленно и игнорируется. Типичный адрес 0000h.
  • 01 — тип записи 01 (конец файла записывать).
  • FF — контрольная сумма записи, рассчитывается как
    01ч + НЕ (00ч + 00ч + 00ч + 01ч).
Пример файла Intel HEX

Ниже приведен пример полного файла Intel HEX:

.
 : 10001300AC12AD13AE10AF1112002F8E0E8F0F2244
: 10000300E50B250DF509E50A350CF5081200132259
: 03000000020023D8
: 0C002300787FE4F6D8FD7581130200031D
: 10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016
: 04003F00A42EFE22CB
: 00000001FF 
 

СМОТРИ ТАКЖЕ

СМОТРИ ТАКЖЕ 8051


Последняя редакция: 25 февраля 2021 г., четверг


Генератор контрольной суммы

Генератор контрольной суммы

Генератор контрольных сумм позволяет пользователям генерировать контрольные суммы и дайджесты. для всего документа или выделения в документе и запускается выбрав «Создать контрольную сумму… «из» Инструменты » или нажав кнопку контрольной суммы на главной панели инструментов или панель инструментов контрольной суммы (находится на вкладке Контрольная сумма окна результатов).

Пользователи могут выбрать желаемые алгоритмы и настроить параметры CRC. для пользовательских CRC до нажатия кнопки «Создать» для расчета контрольные суммы и дайджесты. Все расчеты выполняется на активном документе с помощью Hex Workshop.

Контрольная сумма и алгоритмы дайджеста

Генератор контрольной суммы поддерживает 23 варианта контрольной суммы и дайджестов:

Алгоритм

байтов

Описание

Контрольная сумма (8 бит)

1

Простой счет, в который добавляются все байты в 8-битном аккумуляторе.Начальное значение 0.

Контрольная сумма (16 бит)

2

Простой счет, в который добавляются все байты в 16-битном аккумуляторе. Начальное значение 0.

Контрольная сумма (32 бита)

4

Простой счет, в который добавляются все байты в 32-битном аккумуляторе. Начальное значение 0.

Контрольная сумма (64 бит)

8

Простой счет, в который добавляются все байты в 64-битном аккумуляторе.Начальное значение 0.

CRC (16 бит)

2

16-битный циклический контроль избыточности (CRC) с полином 0x8005 и начальное значение 0x0000.

CRC / CCITT (16 бит)

2

16-битный циклический контроль избыточности (CRC) с полином 0x1021 и начальное значение 0xFFFF.

CRC (32 бит)

4

32-битный циклический контроль избыточности (CRC) с полином 0x04C11DB7 и начальное значение 0xFFFFFFFF.

Пользовательский CRC (16 бит)

2

16-битный циклический контроль избыточности (CRC) с задаваемый пользователем полином и начальное значение.

Пользовательский CRC (32 бит)

4

32-битный циклический контроль избыточности (CRC) с задаваемый пользователем полином и начальное значение.

MD2 (128 бит)

16

Алгоритм дайджеста сообщения MD2 (безопасность данных RSA, Inc.)

MD4 (128 бит)

16

Алгоритм дайджеста сообщений MD4 (безопасность данных RSA, Inc.)

MD5 (128 бит)

16

Алгоритм дайджеста сообщений MD5 (безопасность данных RSA, Inc.)

SHA-1 (160 бит)

20

160-битный алгоритм безопасного хеширования (NIST)

SHA-2 (224 бит)

28

224-битный алгоритм безопасного хеширования (NIST)

SHA-2 (256 бит)

32

256-битный алгоритм безопасного хеширования (NIST)

SHA-2 (384 бит)

48

384-битный алгоритм безопасного хеширования (NIST)

SHA-2 (512 бит)

64

512-битный алгоритм безопасного хеширования (NIST)

RIPEMD (128 бит)

16

128-битная оценка примитивов целостности RACE Дайджест сообщений (RIPEMD)

RIPEMD (160 бит)

20

160-битная оценка примитивов целостности RACE Дайджест сообщений (RIPEMD)

RIPEMD (256 бит)

32

256-битная оценка примитивов целостности RACE Дайджест сообщений (RIPEMD)

RIPEMD (320 бит)

40

320-битная оценка примитивов целостности RACE Дайджест сообщений (RIPEMD)

Тигр (192 бит)

24

192-битный алгоритм Tiger Digest

Whirlpool (512 бит)

64

512-битный алгоритм хеширования Whirlpool

Контрольные суммы и дайджесты отображаются на вкладке Контрольная сумма результатов. Окно (Ctrl + W).

Контрольные суммы отображаются как в десятичном, так и в шестнадцатеричном формате, а дайджесты — только отображается в шестнадцатеричном формате.

Дополнение до 1 и 2

Пользователи могут отображать значения контрольных сумм как рассчитанные или с дополнением до 1 или 2. Выберите раскрывающееся меню «Дополнение» («Нет»). выбран в приведенном выше примере), чтобы переключаться между расчетами («Нет»), 1 комплимент или 2 дополнительных. Дайджесты не отображается в виде дополнения до 1 и 2.

Копирование контрольной суммы и дайджестов

Пользователи могут скопировать контрольную сумму или результат дайджеста, выбрав контрольную сумму / дайджест и нажав Ctrl + C или щелкнув правой кнопкой мыши контрольную сумму / дайджест и выбрав «Копировать» во всплывающем контекстном меню.В данные помещаются в буфер обмена как в двоичном, так и в текстовом форматах. Этот позволяет пользователю вставить значение в Hex Workshop или в другое приложение как текст. При вставке в документ Hex Workshop, поместите курсор редактирования либо в шестнадцатеричный дисплей (слева), либо в текст дисплей (правая сторона), чтобы вставить данные как двоичные или текстовые соответственно.

Результаты клиринга

Контроль результатов контрольной суммы очищается нажатием «X» в правом верхнем углу вкладки «Контрольная сумма».В качестве альтернативы, щелкните правой кнопкой мыши в любом месте вкладки «Контрольная сумма» и выберите «Очистить все». Результаты »из контекстного меню.

Удалите одну контрольную сумму / дайджест, щелкнув правой кнопкой мыши контрольную сумму / дайджест и выбрав «Удалить выбранную контрольную сумму» во всплывающем контексте. меню.

Восстановление контрольных сумм и дайджестов

Контрольные суммы

можно обновить, перезапустив Генератор контрольных сумм. или нажав кнопку обновления (кнопка с 2 закругленными стрелками) на Вкладка Контрольная сумма окна результатов.Освежающий контрольная сумма поддерживает выбранные алгоритмы и параметры выбора (весь документ или блок внутри документа).

Для обновления контрольной суммы документ должен быть открыт в редакторе.

Hex Workshop автоматически заменяет результаты контрольной суммы, сгенерированные на конкретный файл, чтобы избежать путаницы. Это не так возможно отобразить результат контрольной суммы определенного алгоритма перед и после редактирования без создания нового документа.

Скрытие и отображение столбцов таблицы

Столбцы можно показать или скрыть, щелкнув правой кнопкой мыши в любом месте контрольной суммы. вкладка Окна результатов и выбрав подменю «Столбцы» из всплывающего контекстного меню.Описание столбцы и состояние по умолчанию включены ниже:

Колонка

По умолчанию

Описание

Документ

Показано

Часть используемого документа, содержащая имя файла. для отображения контрольной суммы или дайджеста. Выбор контрольной суммы Элемент отображает полный путь в верхнем левом углу вкладки Контрольная сумма.

Смещение

Скрытый

Начальное смещение, используемое для генерации контрольной суммы или переваривать.

Длина

Скрытый

Длина данных, используемых для генерации контрольной суммы или переваривать.

Алгоритм

Показано

Алгоритм, используемый для генерации контрольной суммы или переваривать.

Контрольная сумма

Показано

Десятичное значение контрольной суммы

Контрольная сумма / дайджест

Показано

Шестнадцатеричная контрольная сумма или дайджест-значение

Отправка команд, когда требуются контрольные суммы

Команды с контрольными суммами вычисляются и отправляются следующим образом.В этом примере мы будем использовать команду Play с одного из наших DVD-плееров и предоставим основную информацию о командной строке, необходимую для реализации команды. Команда Play представляет собой шестнадцатеричное число 40, иначе записываемое как 40h или знак ASCII «@». Обратите внимание, что в нашем протоколе команды в кавычках (») являются символами ASCII. Чтобы отправить эту команду и активировать воспроизведение на нашем DVD-плеере, полная шестнадцатеричная строка будет выглядеть как 02 40 00 00 00 00 03 34 33, как указано в протоколе. Шестнадцатеричная строка BD добавит дополнительный заполнитель.(т.е. 02 40 00 00 00 00 00 03 34 33) Теперь давайте объясним, как мы к этому пришли.

02h запускает передачу, 40h — это сама команда воспроизведения, 00h 00h 00h 00h — четыре зарезервированных байта и должны быть отправлены (заполнители), 03h — конец передачи, а байты 34h и 33h — старшие (BCCH ) и низкие (BCCL) контрольные суммы соответственно. Чтобы вычислить контрольные суммы, вы должны добавить от байта команды к байту конца передачи, опуская начальный байт. Для этой команды Play мы добавляем в шестнадцатеричном формате 40h 00h 00h 00h 00h и 03h.Это равно 43ч. Рекомендуется использовать шестнадцатеричный калькулятор, чтобы не ошибиться. Калькулятор Windows имеет настройку для шестнадцатеричного числа, что упрощает это. Не добавляйте эти числа в стандартном десятичном формате с помощью обычного калькулятора, так как это не сработает.

После добавления строки, в данном случае 43h, мы можем сгенерировать контрольные суммы. Для этого десятичный разряд «4» используется для вычисления старшей контрольной суммы, а единичный разряд «3» используется для вычисления младшей контрольной суммы.Считайте оба числа символами ASCII и преобразуйте их в шестнадцатеричное. «ASCII-4» равняется 34, а «ASCII-3» равняется 33, поэтому старшая и младшая контрольные суммы равны 34h 33h, которые добавляются в конец командной строки.

* Примечание. Если ваша добавленная строка имеет значение с разрядами сотен, игнорируйте разряды сотен при вычислении контрольных сумм.

CHD Калькулятор контрольной суммы — CHD Elektroservis

Описание | Он-лайн калькулятор | Скачать


Описание |

Многие из наших продуктов управляются и программируются через системные эксклюзивные сообщения MIDI.К сожалению, создание таких сообщений очень сложно для большинства музыкантов, потому что эти сообщения используют в своей структуре байт «контрольной суммы». Для вычисления байта «Контрольная сумма» необходимы хотя бы базовые знания работы с двоичными или шестнадцатеричными числами. Но создать контрольную сумму с помощью нашего специального калькулятора CHD Checksum Calculator — не проблема.

Калькулятор не требует установки. Он основан на сценарии Java, поэтому его можно запускать в любой операционной системе, которая оснащена веб-браузером.Скачайте и распакуйте архив с калькулятором, а затем запустите его в веб-браузере — откроется окно CHD Checksum Calculator.

Если вы не хотите загружать и запускать скрипт, также доступна онлайн-версия калькулятора (см. Ниже).


Онлайн-калькулятор |

Использование:
[0] [F] Кнопки используются для ввода частичных шестнадцатеричных символов вычисленных байтов (обратите внимание, что принимаются только байты со значением от 0h до 7Fh!)
[Clr] Кнопка (Clear) очищает все
[CE] (Clear Entry) кнопка очищает только последний вставленный байт
[+] (Add) кнопка используется для добавления следующего байта к контрольной сумме
[=] (Checksum Result ) кнопка вычисляет полную контрольную сумму и выводит ее на дисплей калькулятора

Пример задачи:
Вычислить контрольную сумму для [F0h 00h 20h 21h 7Fh 55h 01h 24h xx F7h] сообщения SysEx, где « xx » — это байт контрольной суммы.Байтовый поток для вычисления контрольной суммы начинается с байта « 55h ».

Решение:
Необходимо вычислить 7-битное дополнение суммы байтов 55h 01h 24h (другими словами, семибитную сумму байтов 55h , 01h , 24h и xx должен быть равен нулю).
Нажмите последовательно кнопки [5] [5] [+] [1] [+] [2] [4] [=] ]. Калькулятор показывает на дисплее « ChSum = 06 [шестнадцатеричное] ».Таким образом, « 06 » является обязательным шестнадцатеричным значением, необходимым для байта контрольной суммы « xx » в сообщении SysEx.


Загрузить |

Расчет шестнадцатеричной контрольной суммы — Сценарии и правила

Юличер:

Раньше я использовал такие выражения, как Item.state.toBigDecimal.toBigInteger.intValue.bitwiseAnd (0x03)

Это использует Java, а не Xtend.

Если посмотреть на https: // www., и ~ (побитовое ИЛИ, побитовое И, побитовое исключающее ИЛИ и побитовое дополнение) поддерживаются, а операторы сдвига имеют другое значение в Xtend. Таким образом, вы должны использовать классы и методы Java для управления двоичными данными, как вы это демонстрируете.

Чтобы объяснить, что делает эта строка:

Мы начинаем с Item, который является Java-объектом и вызываем .state.
Возвращает объект состояния, который является объектом Java. Предполагая, что состояние — DecimalType, а не NULL или UNDEF, следующая часть будет работать.
Затем мы вызываем toBigDecimal, что в значительной степени, я думаю, является пустым, потому что DecimalType уже имеет тип BigDecimal, но я могу ошибаться. В любом случае BigDecimal — это объект Java.
Затем мы вызываем toBigInteger, который возвращает значение как тип BigInteger. BigInteger — это объект Java.
Затем мы вызываем intValue, который дает вам примитивный тип int.
Затем мы пытаемся вызвать bitwaiseAnd для примитивного значения int, которое видит Xtend, и, чтобы это произошло, преобразует примитив int в класс Integer, чтобы затем он мог вызвать метод bitwiseAnd.Целое число — это объект Java.

Все это можно уменьшить до

  (состояние элемента как число) .intValue.bitwaiseAnd (0x03)
  

Однако имейте в виду, что int и Integer подписаны, что может или не может быть проблемой в зависимости от типов двоичных манипуляций, которые вы выполняете. byteValue может быть более подходящим.

Но теперь, когда я сказал все вышесказанное, @kevin, это может быть так же просто, как цикл для преобразования каждого шестнадцатеричного значения в число и сложения их всех вместе.Xtend по умолчанию помещает результаты в BigDecimal. Затем вызовите byteValue, который, я уверен, даст вам младший байт. Однако вам нужно будет проверить это, чтобы проверить.

Тестирование необработанных данных с помощью контрольных сумм — пример из реальной жизни — советы по мощности — советы по мощности

Когда PowerShell входит в мир Интернета вещей, иногда необходимо иметь дело с двоичными данными датчиков и устаревшими моделями контрольных сумм для проверки целостности данных.

Вот реальный пример того, как PowerShell может принимать данные датчика и проверять их с помощью контрольной суммы.Описанный здесь пример представляет собой конкретный вариант использования, однако используемые методы могут быть полезны для аналогичных сценариев.

В этом примере PowerShell получает серию шестнадцатеричных данных ($ data). Контрольная сумма — это последний байт (3А). Он определяется как сумма всех байтов в пакете данных. Из этой суммы младший байт представляет контрольную сумму, но только тогда, когда его биты инвертированы. Звучит странно, но имеет смысл. Таким образом, контрольная сумма всегда составляет всего один байт.

Вот как PowerShell может справиться с этими требованиями, сравнить контрольную сумму с вычисленной и проверить целостность данных:

 $ data = '00030028401D2E8D4022C0EE4022C0E64022C0E6418B4ACD419FE7B641A05F0E41A060D041A061C23F0A7CDA3A'

# контрольная сумма - последний байт
$ контрольная сумма = [преобразовать] :: ToByte ($ data.Подстрока ($ data.Length-2,2), 16)

# удалить контрольную сумму из данных
$ data = $ data.Substring (0, $ data.Length -2)

# просуммировать все байты
$ sum = $ data -split '(? <= \ G. {2}) (? =.)' |
  Foreach-Object {$ c = 0} {$ c + = [Convert] :: ToByte ($ _, 16)} {$ c}
  
# получаем младший байт
$ lsb = ([Net.IPAddress] $ sum) .GetAddressBytes () [0]

# инвертировать бит
$ checkumReal = $ lsb -bxor 0xFF

# сравнивать
если ($ контрольная сумма -ne $ контрольная сумма Реал)
{
  бросить "Контрольная сумма не совпадает"
}
еще
{
  Запись-предупреждение «Контрольная сумма в норме»
}
 

Очки обучения:

  • Используйте [Convert] :: ToByte ($ number, 16) для преобразования шестнадцатеричных строк в числа
  • С помощью регулярных выражений вы можете легко разделить поток символов (т.е. шестнадцатеричные пары) в список пар, чтобы вы могли вычислить сумму
  • Преобразуя число в IP-адрес, вы получаете простой доступ к старшим и младшим байтам (LSB, MSB)
  • Используйте -bxor для инвертирования битов

psconf.eu - PowerShell Conference EU 2019 - 4-7 июня, Ганновер, Германия - посетите www.psconf.eu Для опытных сценаристов PowerShell не так уж много тренингов, где вы действительно все еще узнаете что-то новое. Но есть одно место, которое нельзя пропустить: PowerShell Conference EU - с 40 известными международными докладчиками, включая членов команды PowerShell и MVP, а также 350 профессиональных и творческих сценаристов PowerShell.Регистрация открыта на сайте www.psconf.eu, и вскоре станет доступна полная трехдневная программа на 4 дня. Раз в год это просто умный шаг - собраться вместе, обновить ноу-хау, узнать о безопасности и смягчении последствий, а также принести домой свежие идеи и авторитетные рекомендации. Мы будем рады видеть вас и слышать от вас!

Повторите этот совет повторно!

.
Leave a Reply

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *