0
votes

I'm using the standard Python3 lib binascii, and specifically the crc_hqx() function

binascii.crc_hqx(data, value)

Compute a 16-bit CRC value of data, starting with value as the initial CRC, and return the result. This uses the CRC-CCITT polynomial x16 + x12 + x5 + 1, often represented as 0x1021. This CRC is used in the binhex4 format.

I'm able to convert to CRC with this code:

import binascii
t = 'abcd'
z = binascii.crc_hqx(t.encode('ascii'), 0)
print(t,z)

which, as expected, prints the line

abcd 43062

But how do I convert back to ASCII?

I've tried variations with the a2b_hqx() function

binascii.a2b_hqx(string)

Convert binhex4 formatted ASCII data to binary, without doing RLE-decompression. The string should contain a complete number of binary bytes, or (in case of the last portion of the binhex4 data) have the remaining bits zero.

The simplest version would be:

y = binascii.a2b_hqx(str(z))

But I've also tried variations with bytearray() and str.encode(), etc.


For this code:

import binascii
t = 'abcd'
z = binascii.crc_hqx(t.encode('ascii'), 0)
print(t,z)
y = binascii.a2b_hqx(str(z))

the Traceback:

abcd 43062
Traceback (most recent call last):
  File "test.py", line 5, in <module>
    y = binascii.a2b_hqx(str(z))
binascii.Incomplete: String has incomplete number of bytes

And with this code:

y = binascii.a2b_hqx(bytearray(z))

This Traceback:

binascii.Error: Illegal char
1
I'm starting to think that it's a checksum and not possible to convert back.philshem

1 Answers

0
votes

What is generated is a checksum and not possible to convert back to ascii.