def crc(nachricht,polynom = '10011'): """ zu der 'nachricht' und zu dem 'polynom' (Strings aus 0 und 1) wird die CRC-'Prüfsumme' berechnet (String aus 0 und 1) """ lp = len(polynom) ln = len(nachricht) for j in range(lp-1): nachricht = nachricht+'0' nachricht = list(nachricht) schieberegister = nachricht[:lp] for i in range(ln): if schieberegister[0] == '1': for j in range(lp): if schieberegister[j] == polynom[j]: schieberegister[j] = '0' else: schieberegister[j] = '1' if i < ln-1: schieberegister = schieberegister[1:lp]+list(nachricht[lp+i]) return ''.join(schieberegister[1:]) if __name__ == '__main__': n='1001110100011101' # Test-Nachricht, 16Bit-lang crcn = crc(n) print(n, crc(n)) print('Einerbündel') for i in range(len(n)): m = list(n) if m[i] == '1': m[i] = '0' else: m[i] = '1' g = ''.join(m) crcg = crc(g) print(g,crcg) if crcg == crcn: print('Kollision') print('Zweierbündel') for i in range(len(n)-1): m = list(n) if m[i] == '1': m[i] = '0' else: m[i] = '1' if m[i+1] == '1': m[i+1] = '0' else: m[i+1] = '1' g = ''.join(m) crcg = crc(g) print(g,crcg) if crcg == crcn: print('Kollision') print('Dreierbündel,alle Bits verändert') for i in range(len(n)-2): m = list(n) if m[i] == '1': m[i] = '0' else: m[i] = '1' if m[i+1] == '1': m[i+1] = '0' else: m[i+1] = '1' if m[i+2] == '1': m[i+2] = '0' else: m[i+2] = '1' g = ''.join(m) crcg = crc(g) print(g,crcg) if crcg == crcn: print('Kollision') print('Dreierbündel,nur Außen-Bits verändert') for i in range(len(n)-2): m = list(n) if m[i] == '1': m[i] = '0' else: m[i] = '1' if m[i+2] == '1': m[i+2] = '0' else: m[i+2] = '1' g = ''.join(m) crcg = crc(g) print(g,crcg) if crcg == crcn: print('Kollision') print('Viererbündel,alle Bits verändert') for i in range(len(n)-3): m = list(n) if m[i] == '1': m[i] = '0' else: m[i] = '1' if m[i+1] == '1': m[i+1] = '0' else: m[i+1] = '1' if m[i+2] == '1': m[i+2] = '0' else: m[i+2] = '1' if m[i+3] == '1': m[i+3] = '0' else: m[i+3] = '1' g = ''.join(m) crcg = crc(g) print(g,crcg) if crcg == crcn: print('Kollision') print('Fünferbündel,alle Bits verändert') for i in range(len(n)-4): m = list(n) if m[i] == '1': m[i] = '0' else: m[i] = '1' if m[i+1] == '1': m[i+1] = '0' else: m[i+1] = '1' if m[i+2] == '1': m[i+2] = '0' else: m[i+2] = '1' if m[i+3] == '1': m[i+3] = '0' else: m[i+3] = '1' if m[i+4] == '1': m[i+4] = '0' else: m[i+4] = '1' g = ''.join(m) print(n,crcn) crcg = crc(g) print(g,crcg) if crcg == crcn: print('Kollision')