es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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))

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    El error «ValueError: Cadena base45 no válida» significa que la cadena que estás intentando decodificar utilizando el método base45.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:

    pip install covid19-verifier
    

    Una vez instalada, puedes usar el método decode_raw para decodificar tus datos de código de barras:

    from covid19_verifier.decode import decode_raw
    
    # `data` es tu cadena de datos de código de barras
    datos_decodificados = decode_raw(data)
    
    # Los datos decodificados son un objeto de diccionario
    print(datos_decodificados)
    

    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 biblioteca covid19-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.

Comments are closed.