Decodificación del certificado de PRUEBAS de covid en Python – cadena base45 inválida.
Gracias por tu ayuda.
Con el siguiente script de ejemplo, puedo decodificar con éxito un código de barras de vacunación (a) de COVID y pasar el json a mi aplicación (he probado esto con los códigos de barras de mi aplicación “pase verde” y funciona).
Sin embargo, cuando escaneo un código de barras (b) de PRUEBA (es decir, prueba de antígenos, prueba PCR, …) de nuestras autoridades locales y paso la cadena al script, el mismo script devuelve “ValueError: cadena base45 no válida”.
Al comparar el código base45 de vacunación (a) y el código base45 de prueba (b), ambos parecen legítimos a simple vista, pero obviamente se debe hacer algo más para que (b) sea válido base45.
Por razones de seguridad, no puedo pegar mis datos reales (información sensible), por lo que tal vez puedas ayudarme a entender por qué (b) no es base45 sin ver toda la cadena. La única forma en que puedes ayudarme es si escaneas tus propios (a) y (b) con un escáner de código de barras y luego ejecutas las dos cadenas que obtienes a través de mi script, o tal vez conoces algún dato de prueba disponible públicamente con el que podamos trabajar. ¡¡¡Muchas gracias, chicos!!!
import json
import sys
import zlib
import base45
import cbor2
from cose.messages import CoseMessage
payload = VER COMENTARIOS
print(“decoding payload: ” + payload)
decodificar Base45 (eliminar el prefijo HC1:)
decoded = base45.b45decode(payload)
descomprimir usando zlib
decompressed = zlib.decompress(decoded)
decodificar mensaje COSE (sin verificación de firma)
cose = CoseMessage.decode(decompressed)
decodificar la carga útil codificada en CBOR e imprimir como json
print(json.dumps(cbor2.loads(cose.payload), indent=2))
davy.ai
Solución
El error
«ValueError: Cadena base45 no válida»
significa que la cadena que estás intentando decodificar utilizando el métodobase45.b45decode()
no es una cadena codificada en base45 válida. Puede haber múltiples razones por las que esto está ocurriendo, y puede ser difícil depurar sin ver los datos reales.Sin embargo, una posible razón por la que el código de barras de prueba no se puede decodificar podría ser que no sigue el mismo formato de datos que el código de barras de vacunación. Es posible que el código de barras de prueba esté utilizando un formato de codificación diferente o un algoritmo de compresión diferente.
Para verificar esta hipótesis, puedes intentar decodificar el código de barras de prueba utilizando un conjunto diferente de algoritmos de decodificación. Una herramienta popular de código abierto que puede ayudar con esto es la biblioteca
covid19-verifier
desarrollada por la Unión Europea. Esta biblioteca proporciona un conjunto de algoritmos de decodificación que funcionan para diferentes tipos de certificados COVID-19.Puedes instalar esta biblioteca utilizando
pip
:Una vez instalada, puedes usar el método
decode_raw
para decodificar tus datos de código de barras:Si el método
decode_raw()
devuelve un resultado válido para tu código de barras de prueba, es probable que el problema esté en tu script original y no en los datos del código de barras. Luego puedes comparar los algoritmos de decodificación utilizados por la bibliotecacovid19-verifier
con los utilizados en tu script para identificar cualquier diferencia.Si el método
decode_raw()
también falla al decodificar los datos del código de barras de prueba, es probable que los propios datos sean inválidos o no cumplan con el formato esperado. En ese caso, es posible que debas comunicarte con las autoridades locales o consultar los documentos de estándares relevantes para comprender el formato de datos esperado para los códigos de barras de prueba en tu región.