2008-09-08 17 views
20

Donc, pour simplifier ma vie, je veux pouvoir ajouter de 1 à 7 caractères supplémentaires à la fin de certaines images jpg que mon programme traite *. Ce sont des remplissages factices (fillers, etc - probablement tous 0x00) juste pour faire de la taille du fichier un multiple de 8 octets pour le chiffrement par blocs. Après avoir essayé cela avec quelques programmes, il semble qu'ils vont bien avec les caractères supplémentaires, qui se produisent après le FF D9 that specifies the end of the image - il semble donc que le format de fichier est bien défini que la 'corruption' que j'ajoute à la fin ne devrait pas avoir d'importance.Des données aléatoires ajoutées à un fichier JPG le rendront-elles inutilisable?

Je peux toujours post-traiter les fichiers plus tard si nécessaire, mais ma préférence est de faire la chose la plus simple possible - qui est de les laisser rester (je décrypte d'autres types de fichiers et ils ne seront pas dérangés, cas particulier est ennuyeux).

je figure avec tous les discours de Steganography il y a quelques années hullaballo, quelqu'un a quelques-entrée ici ...

(traitement de chiffrement par blocs de 8 octets, je ne veux pas enregistrer la taille du fichier pré-crypté, donc ajoutez 0x00 aux données d'entrée, et laissez-les là après le décodage)

Répondre

20

Non, vous pouvez ajouter des bits à la fin d'un fichier jpg, sans le rendre inutilisable. L'en-tête du fichier jpg indique comment le lire, ainsi le programme le lisant s'arrêtera à la fin des données jpg. En fait, les gens ont caché des fichiers zip à l'intérieur des fichiers jpg en ajoutant les données zip à la fin des données jpg. En raison de la façon dont ces formats sont structurés, le fichier résultant est valide dans l'un ou l'autre format.

+0

inutilisable (ce qui était la question) n'est pas la même chose que la réduction de sa convivialité. Un peu d'un nickpick, je vais accorder. Mais, une distinction importante, car il peut être une solution viable. –

+0

Ok, je ne suis pas sûr que dire "sans réduire sa convivialité" pourrait signifier "le rendre inutilisable" mais je vais éditer ceci juste pour le rendre plus clair. – pkaeding

+0

Heh heh heh. Nous programmeurs pouvons diviser un cheveux si finement ... –

7

Vous pouvez .. mais les résultats peuvent être imprévisibles.

Même s'il y a suffisamment d'informations dans le format pour indiquer au client d'ignorer les données supplémentaires, il est probable que ce ne soit pas le cas pour le programmeur testé.

Un programme paranoïaque peut regarder la taille, remarquer l'écart et décider qu'il ne traitera pas votre fichier car il ne le comprend pas clairement. Cela est particulièrement probable lors de la lecture de données sur le Web lorsque des octets aléatoires dans un fichier peuvent être considérés comme un risque de sécurité.

3

Vous pouvez intégrer vos données dans la balise XMP dans un fichier JPEG (ou des champs EXIF ​​ou IPTC d'ailleurs). XMP est XML, vous avez donc un peu de flexibilité pour faire vos propres tâches.

Ce n'est probablement pas la chose la plus simple possible mais mettre vos données ici maintiendra l'intégrité du JPEG et ne nécessitera pas de "post-traitement". Vos données apparaîtront alors dans d'autres logiciels d'imagerie tels que PhotoShop, ce qui n'est peut-être pas idéal.

1

Comme d'autres l'ont indiqué, vous n'avez aucun contrôle sur la manière dont les programmes traitent les fichiers image et, par conséquent, certains programmes peuvent trouver que les images sont valides.

Cependant, il y a un plus gros problème ici. À en juger par votre question, je déduis que vous pratiquez la «sécurité par l'obscurité». C'est largement considéré comme une très mauvaise pratique. Utilisez Google pour trouver une pléthore d'articles sur le sujet.

+3

Qu'est-ce qui indique cela? J'utilise l'algorithme TEA pour crypter les données, mais il crypte 8 octets à la fois. Plutôt que d'inclure des métadonnées dans le fichier crypté pour me dire quelle était la taille des données d'origine, je remplissais l'original à une limite de 8 octets, et laissais le remplissage en place. –