Implementando Checksum usando Python

La suma de comprobación es una especie de método de detección de errores en las redes informáticas. Este método es utilizado por los protocolos de capa superior y hace uso de Checksum Generator en el lado del remitente y Checksum Checker en el lado del receptor. En este artículo, implementaremos el algoritmo de suma de comprobación en Python.

Consulte los siguientes artículos para obtener información detallada sobre la suma de comprobación

Pasos para implementar el algoritmo.

Paso 1: generar suma de comprobación (lado del remitente)

  1. El mensaje se divide en 4 secciones, cada una de k bits.
  2. Todas las secciones se suman para obtener la suma.
  3. La suma se complementa y se convierte en Checksum.
  4. La suma de comprobación se envía con los datos.

Paso 2: Checksum Checker (lado del receptor)

  1. El mensaje se divide en 4 secciones de k bits.
  2. Todas las secciones se suman para obtener la suma.
  3. La suma de comprobación generada se suma a la suma de todas las secciones.
  4. La suma resultante se complementa.

Después de seguir estos pasos, si la suma de verificación del lado del receptor y el lado del verificador se suman y complementan y el resultado es igual a cero, los datos son correctos y, por lo tanto, se aceptan. De lo contrario, se detecta un error y se rechazan los datos. 

A continuación se muestra la implementación del enfoque anterior: 

Python3

# Function to find the Checksum of Sent Message
def 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 + Checksum
def 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 Code
SentMessage = "10010101011000111001010011101100"
k = 8
#ReceivedMessage = "10000101011000111001010011101101"
ReceivedMessage = "10010101011000111001010011101100"
# Calling the findChecksum() function
Checksum = findChecksum(SentMessage, k)
 
# Calling the checkReceiverChecksum() function
ReceiverChecksum = checkReceiverChecksum(ReceivedMessage, k, Checksum)
 
# Printing Checksum
print("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 checksum
finalcomp=''
for i in finalsum:
    if(i == '1'):
        finalcomp += '0'
    else:
        finalcomp += '1'
 
# If sum = 0, No error is detected
if(int(finalcomp,2) == 0):
    print("Receiver Checksum is equal to 0. Therefore,")
    print("STATUS: ACCEPTED")
     
# Otherwise, Error is detected
else:
    print("Receiver Checksum is not equal to 0. Therefore,")
    print("STATUS: ERROR DETECTED")
Producción

SENDER SIDE CHECKSUM:  10000101
RECEIVER SIDE CHECKSUM:  01111010
Receiver Checksum is equal to 0. Therefore,
STATUS: ACCEPTED

Publicación traducida automáticamente

Artículo escrito por riyakumar2709 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *