
Eu precisava disso para entender onde e como o arquivo JPEG foi corrompido durante a transferência.
VCDIFF - formato e algoritmo para codificação delta. Descrito na RFC 3284 .
Codificação delta (codificação delta da Eng. Delta) - uma maneira de representar dados na forma da diferença (delta) entre os dados seriais em vez dos próprios dados.
Por exemplo, eu uso arquivos de texto codificados no Windows-1251 para maior clareza. Mas com o mesmo sucesso, esses arquivos podem ser binários.
Fontes:
" " ( source.txt ) " " ( target.txt )
Você precisa obter a diferença entre os arquivos:
" " ( source.txt -> target.txt ) " " ( target.txt -> source.txt )
Eu uso o programa xdelta3, mas acho que qualquer um que funcione com o formato vcdiff fará.
Como obter
Vamos precisar de outro arquivo preenchido com espaços:
" " ( spaces.txt )
Ele deve ser maior ou igual em tamanho ao arquivo de origem (source.txt)
Equipa:
xdelta3 -e -A -n -s source.txt target.txt | xdelta3 -d -s spaces.txt
Resultado:
Sinalizadores usados:
-e
- cria um delta
-A
- remove o excesso de cabeçalhos
-n
- remove crc (não permite usar o delta com outra fonte)
-s []
- a fonte com a qual o arquivo de destino é comparado e restaurado
-d
- obtém o arquivo de destino do delta e fonte
Como isso funciona
Se você executar o comando:
xdelta3 -e -A -n -s source.txt target.txt | xdelta3 printdelta
Depois de todos os cabeçalhos, veremos os comandos VCDIFF
Offset Code Type1 Size1 @Addr1 + Type2 Size2 @Addr2 000000 025 CPY_0 9 S@0 000009 010 ADD 9 000018 025 CPY_0 9 S@14
O formato VCDIFF é inerentemente muito simples. É composto por 3 equipes.
COPY
- copia dados de uma origem ou destino
ADD
(adicionar) - grava dados armazenados no delta no arquivo de destino (dados exclusivos dos quais não estão na origem)
RUN
(repeat) - repete um byte do delta um número especificado de vezes
A Delta armazena apenas dados exclusivos e copia o restante da fonte. Se você executar o comando:
xdelta3 -e -A -n -s source.txt target.txt > target.vcdiff
Veremos no delta apenas a palavra "alterações", que está apenas no arquivo de destino
D0A6D093D094200102011720131B2009 0302190D0A19200E
( JSON não gosta de caracteres especiais, então eu os traduzi para HEX )
Se o delta é aplicado na fonte (source.txt), obtemos o arquivo de destino (target.txt)
xdelta3 -d -s source.txt target.vcdiff
Substituindo a origem (source.txt) por um arquivo preenchido com espaços (spaces.txt), substituímos os dados que são repetidos na origem e no arquivo de destino por espaços.
xdelta3 -d -s spaces.txt target.vcdiff
Você pode usar qualquer outro caractere no arquivo spaces.txt. A principal condição é que o arquivo spaces.txt seja maior ou igual em tamanho ao arquivo de origem.
Na verdade, comparei arquivos JPEG como este:
xdelta3 -e -A -n -s bad_image.jpg good_image.jpg | xdelta3 -d -s spaces.txt
O resultado da comparação desses arquivos:
Muitos espaços e bytes "vencidos". Bytes incorretos transferidos para o HEX.
Teste os arquivos JPEG nos quais você pode testar os métodos de comparação:
xdelta3 -e -A -n -s tortoise_bad.jpg tortoise.jpg | xdelta3 -d -s spaces.txt
O resultado da comparação desses arquivos:
Ver resultado F1BF F0B786 F39BAF F3BD94
Bytes incorretos transferidos para o HEX.