…esto no es un subtítulo…
2012-09-11
El
artículo de ayer describía el mecanismo de obtención de audio
y vídeo de la página de RTVE, pero
dejaba para hoy la descripción del mecanismo empleado para decodificar
la dirección del contenido. Vimos que esta dirección se encuentra
encapsulada entre los metadatos de una imagen en la forma de un campo
de texto con la siguiente estructura:
[TEXTO OFUSCADO]: [CLAVE NUMÉRICA]
#:
(almohadilla, dos puntos, espacio). Si usamos la herramienta estándar
de *nix strings con sus parámetros por defecto sobre la
imagen, el separador queda acortado debido a que parte de él no es
reconocida como texto. Si usamos esta herramienta sin pasarle
opciones adicionales, nos interesan las tres primeras líneas de
la salida:
IHDR
tEXt[TEXTO OFUSCADO]#
[CLAVE NUMÉRICA]
tEXt
. La tercera línea contiene caracteres
no numéricos después de la secuencia de dígitos que es
[CLAVE NUMÉRICA]. Con los valores de
[TEXTO OFUSCADO] y [CLAVE NUMÉRICA]
en la mano, podemos proceder a la decodificación. Hay varias formas
de plantearla; quizá una de las más fáciles es en dos pasos.
Tenemos que construir un nuevo texto, [TEXTO
INTERMEDIO] , a base de seleccionar caracteres de
[TEXTO OFUSCADO]. De esta manera, el siguiente paso
queda más sencillo que sin esta etapa de postproceso. La selección
se hace a intervalos crecientes con un periodo igual a 4. Numerados
los caracteres de [TEXTO OFUSCADO] de 1 en adelante,
los caracteres que forman [TEXTO INTERMEDIO] siguen
esta secuencia:
1, 3, 6, 10, 11, 13, 16, 20, 21, 23, 26, 30, …
Es decir, se parte del primer carácter (un salto de 1 carácter desde 0),
luego hay un salto de 2 caracteres, luego hay un salto de 3 caracteres, luego
hay un salto de 4 caracteres y se vuelve a empezar cíclicamente con el salto
de 1 carácter. El algoritmo queda así:
origen ← 0
destino ← 1
incremento ← 1
mientras origen < longitud de [TEXTO OFUSCADO]
origen ← origen + incremento
[TEXTO INTERMEDIO]destino ← [TEXTO OFUSCADO]origen
incremento ← incremento + 1
si incremento = 5, entonces incremento ← 1
destino ← destino + 1
Los subíndices de [TEXTO OFUSCADO] y [TEXTO INTERMEDIO] indican caracteres individuales por sus posiciones numéricas empezando por 1. Así, si tuviéramos «probando» como valor de [TEXTO OFUSCADO] y el valor de origen fuera igual a 4, [TEXTO OFUSCADO]origen sería igual a «b».
Ahora que tenemos [TEXTO INTERMEDIO], podemos decdificar la dirección con la información contenida en [CLAVE NUMÉRICA]. No usaremos todos los dígitos de la clave, sino que los seleccionaremos con una secuencia algo similar a la del paso anterior. Construiremos la dirección del contenido, [DIRECCIÓN]. La idea es ésta:
dígito ← 0
incremento ← 4
destino ← 1
mientras dígito < longitud de [CLAVE NUMÉRICA]
dígito ← dígito + 1
origen ← 10 ⋅ [CLAVE NUMÉRICA]dígito
dígito ← dígito + incremento
origen ← origen + [CLAVE NUMÉRICA]dígito
origen ← origen + 1
[DIRECCIÓN]destino = [TEXTO INTERMEDIO]origen
incremento ← incremento + 1
si incremento = 5, entonces incremento ← 1
destino ← destino + 1
Los subíndices de [CLAVE NUMÉRICA], [TEXTO INTERMEDIO] y [DIRECCIÓN] funcionan como los de [TEXTO OFUSCADO] y [TEXTO INTERMEDIO] en el primer algoritmo.
He actualizado rtve-mediateca-dl, el pequeño programita para sistemas *nix que implementa el método descrito en estos dos últimos artículos.
Categorías: Informática