Validación de Mensajes Cifrados con Python

import datetimedef obtener_dia_mes(): today = datetime.date.today() return today.daydef es_primo(num): if num <= 1: return False elif num <= 3: return True elif num % 2 == 0 or num % 3 == 0: return False i = 5 while i * i <= num: if num % i == 0 or num % (i + 2) == 0: return False i += 6 return Truedef generar_validacion(mensaje): if len(mensaje) < 512: return "El mensaje cifrado debe tener al menos 512 bytes" codigo_verificacion = mensaje[:16] + mensaje[-16:] datos = mensaje[16:-16] dia_mes = obtener_dia_mes() estado_actual = dia_mes for i in range(0, len(datos), 4): if not datos[i:i+2].isdigit(): return "La cadena no comienza con el día del mes en hexadecimal" estado = int(datos[i:i+2], 16) if estado % estado_actual != 0: return "Los estados intermedios no son múltiplos del estado inicial" if estado >= estado_actual: return "El tercer estado no es menor que el segundo estado" estado_actual = estado resultado_final = sum(int(datos[i:i+2], 16) for i in range(0, len(datos), 4)) ultimos_dos_caracteres = str(resultado_final)[-2:] if not es_primo(int(ultimos_dos_caracteres)): return "Los últimos dos caracteres no son números primos" return "Mensaje válido. Código de verificación: " + codigo_verificacion# Ejemplo de uso mensaje_cifrado = "090A0B0C...ABCDE" # Reemplaza esto con tu mensaje cifrado resultado = generar_validacion(mensaje_cifrado) print(resultado)

Este código sigue las reglas especificadas para validar un mensaje cifrado según los criterios proporcionados. Puedes ajustarlo según tus necesidades específicas o integrarlo en tu aplicación según sea necesario.

Representación en Pseudocódigo

A continuación, se muestra el algoritmo en forma de pseudocódigo:

Función obtener_día_mes(): Devolver día del mes actual en formato hexadecimalFunción es_primo(num): Si num es menor o igual a 1, Devolver Falso Si num es igual a 2 o 3, Devolver Verdadero Si num es divisible por 2 o 3, Devolver Falso Para cada número i desde 5 hasta la raíz cuadrada de num: Si num es divisible por i o i+2, Devolver Falso Devolver VerdaderoFunción generar_validación(mensaje): Si longitud de mensaje es menor que 512, Devolver "El mensaje cifrado debe tener al menos 512 bytes" Asignar a código_verificación los primeros 16 y los últimos 16 caracteres de mensaje Asignar a datos los caracteres entre la posición 16 y longitud-16 de mensaje Asignar a estado_actual el resultado de obtener_día_mes() Para cada i desde 0 hasta longitud de datos - 1 con incremento de 4: Si los caracteres en posición i a i+1 de datos no son dígitos hexadecimales, Devolver "La cadena no comienza con el día del mes en hexadecimal" Asignar a estado el valor entero de los caracteres en posición i a i+1 de datos en formato hexadecimal Si estado modulo estado_actual no es cero, Devolver "Los estados intermedios no son múltiplos del estado inicial" Si estado es mayor o igual a estado_actual, Devolver "El tercer estado no es menor que el segundo estado" Asignar a estado_actual el valor de estado Asignar a resultado_final la suma de los valores enteros de los caracteres en posiciones i a i+1 de datos en formato hexadecimal para cada i desde 0 hasta longitud de datos - 1 con incremento de 4 Asignar a ultimos_dos_caracteres los últimos dos caracteres de resultado_final en formato cadena Si no es_primo(entero(ultimos_dos_caracteres)), Devolver "Los últimos dos caracteres no son números primos" Devolver "Mensaje válido. Código de verificación: " concatenado con código_verificación

Este pseudocódigo sigue la misma lógica que la implementación en Python, pero en un formato más general y legible, que debería ser fácil de traducir a cualquier otro lenguaje de programación.

Estructura Básica de un Nodo en C

Aquí tienes la estructura básica de un nodo en C para una lista enlazada simple que almacena enteros:

#include <stdio.h> #include <stdlib.h>// Definición de la estructura del nodo struct Nodo { int dato; // Dato almacenado en el nodo struct Nodo* siguiente; // Puntero al siguiente nodo };int main() { // Crear un nodo struct Nodo* nodo1 = (struct Nodo*)malloc(sizeof(struct Nodo)); // Asignar valores al nodo nodo1->dato = 10; nodo1->siguiente = NULL; // El siguiente nodo es NULL porque es el único nodo de la lista // Imprimir el valor almacenado en el nodo printf("Dato del nodo: %d\n", nodo1->dato); // Liberar la memoria asignada al nodo free(nodo1); return 0; }

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.