Implementing Checksum using Python - GeeksforGeeks

03 May, 2022
The checksum is a kind of error Detection method in Computer Networks. This method used by the higher layer protocols and makes use of Checksum Generator on the Sender side and Checksum Checker on the Receiver side. In this article, we will be implementing the checksum algorithm in Python.
Refer to the below articles to get detailed information about the checksum
Error Detection in Computer Networks
Error Detection Code – Checksum
Steps to implement the algorithm.
The message is divided into 4 sections, each of k bits.All the sections are added together to get the sum.The sum is complemented and becomes the Checksum.The checksum is sent with the data.
The message is divided into 4 sections, each of k bits.
All the sections are added together to get the sum.
The sum is complemented and becomes the Checksum.
The checksum is sent with the data.
The message is divided into 4 sections of k bits.All sections are added together to get the sum.The generated checksum is added to the sum of all sections.The resulting sum is complemented.
The message is divided into 4 sections of k bits.
All sections are added together to get the sum.
The generated checksum is added to the sum of all sections.
The resulting sum is complemented.
After following these steps, if the checksum of receiver side and the checker side are added and complemented and the result is equal to zero, the data is correct and is therefore accepted. Otherwise, an error is detected and the data is rejected. 
Below is the implementation of the above approach: 
Python3
# Function to find the Checksum of Sent Messagedef findChecksum(SentMessage, k):       # Dividing sent message in packets of k bits.    c1 = SentMessage[0:k]    c2 = SentMessage[k:2*k]    c3 = SentMessage[2*k:3*k]    c4 = SentMessage[3*k:4*k]     # Calculating the binary sum of packets    Sum = bin(int(c1, 2)+int(c2, 2)+int(c3, 2)+int(c4, 2))[2:]     # Adding the overflow bits    if(len(Sum) > k):        x = len(Sum)-k        Sum = bin(int(Sum[0:x], 2)+int(Sum[x:], 2))[2:]    if(len(Sum) < k):        Sum = '0'*(k-len(Sum))+Sum     # Calculating the complement of sum    Checksum = ''    for i in Sum:        if(i == '1'):            Checksum += '0'        else:            Checksum += '1'    return Checksum # Function to find the Complement of binary addition of# k bit packets of the Received Message + Checksumdef checkReceiverChecksum(ReceivedMessage, k, Checksum):       # Dividing sent message in packets of k bits.    c1 = ReceivedMessage[0:k]    c2 = ReceivedMessage[k:2*k]    c3 = ReceivedMessage[2*k:3*k]    c4 = ReceivedMessage[3*k:4*k]     # Calculating the binary sum of packets + checksum    ReceiverSum = bin(int(c1, 2)+int(c2, 2)+int(Checksum, 2) +                      int(c3, 2)+int(c4, 2)+int(Checksum, 2))[2:]     # Adding the overflow bits    if(len(ReceiverSum) > k):        x = len(ReceiverSum)-k        ReceiverSum = bin(int(ReceiverSum[0:x], 2)+int(ReceiverSum[x:], 2))[2:]     # Calculating the complement of sum    ReceiverChecksum = ''    for i in ReceiverSum:        if(i == '1'):            ReceiverChecksum += '0'        else:            ReceiverChecksum += '1'    return ReceiverChecksum  # Driver CodeSentMessage = "10010101011000111001010011101100"k = 8#ReceivedMessage = "10000101011000111001010011101101"ReceivedMessage = "10010101011000111001010011101100"# Calling the findChecksum() functionChecksum = findChecksum(SentMessage, k) # Calling thr checkReceiverChecksum() functionReceiverChecksum = checkReceiverChecksum(ReceivedMessage, k, Checksum) # Printing Checksumprint("SENDER SIDE CHECKSUM: ", Checksum)print("RECEIVER SIDE CHECKSUM: ", ReceiverChecksum)finalsum=bin(int(Checksum,2)+int(ReceiverChecksum,2))[2:] # Finding the sum of checksum and received checksumfinalcomp=''for i in finalsum:    if(i == '1'):        finalcomp += '0'    else:        finalcomp += '1' # If sum = 0, No error is detectedif(int(finalcomp,2) == 0):    print("Receiver Checksum is equal to 0. Therefore,")    print("STATUS: ACCEPTED")     # Otherwise, Error is detectedelse:    print("Receiver Checksum is not equal to 0. Therefore,")    print("STATUS: ERROR DETECTED")
SENDER SIDE CHECKSUM:  10000101
RECEIVER SIDE CHECKSUM:  01111010
Receiver Checksum is equal to 0. Therefore,
STATUS: ACCEPTED

sagartomar9927
metalsrivastav
Computer Networks
Python
Computer Networks
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Advanced Encryption Standard (AES)
Intrusion Detection System (IDS)
Introduction and IPv4 Datagram Header
Secure Socket Layer (SSL)
Cryptography and its Types
Read JSON file using Python
Adding new column to existing DataFrame in Pandas
Python map() function
How to get column names in Pandas dataframe