2010-11-07 9 views
1

Je réalise un projet dans 'Steganography' dans lequel je veux crypter le contenu d'un fichier en utilisant l'algorithme 'Blowfish' et ensuite je veux incorporer le texte crypté dans l'image et faire la procédure inverse pour extraire l'image.
La méthode 'update' de la classe 'Cipher' crypte seulement certains no. d'octets mais, ici je veux tous les octets (contenu crypté) du fichier dans un seul tableau. C'est le cas avec la méthode 'update' dans le décryptage. Ce tableau sera ensuite transmis à une méthode dans laquelle j'intègre le texte dans l'image et extrait au besoin. Alors, quelle peut être la meilleure approche pour ce problème?
Merci.Comment ajouter un numéro. d'octets à un tableau d'octets?

+0

@Will Hartung: Je vous remercie. L'idée a finalement fonctionné. J'ai utilisé ceci pour le 'cryptage'. :) – Supereme

Répondre

5

La plupart des chiffrements sont des chiffrements en continu. Ils peuvent prendre des blobs de données et diffuser des résultats en les cryptant/décryptant. La classe Java Cipher fonctionne de cette façon. Vous appelez update (..) avec un bloc de données, et il renvoie un bloc de données cryptées. Lorsque vous atteignez la fin de vos données d'entrée, vous appelez la méthode finale (...). Maintenant, si vous souhaitez accumuler toutes vos données dans un seul tampon binaire, et crypter tout à la fois, cela fonctionne bien aussi. Mais à la fin, de toute façon fonctionne, le chiffrement ne se soucie pas si elle crypte 1 octet à la fois ou 1 Mo à la fois. Si vous voulez simplement savoir comment ajouter des tableaux d'octets, vous créez simplement un nouveau tableau d'octets dont la longueur est égale à la somme des tailles des tableaux que vous souhaitez ajouter, puis utilisez System.arraycopy pour déplacer copier l'original tableaux.

byte[] newbuf = new byte[oldbuf1.length + oldbuf2.length]; 
System.arraycopy(oldbuf1, 0, newbuf, 0, oldbuf1.length); 
System.arraycopy(oldbuf2, 0, newbuf, oldbuf1.length, oldbuf2.length); 

Si vous allez faire beaucoup, et vous avez la mémoire à épargner, il est préférable d'accumuler vos morceaux de données dans des tampons d'octets disparates, les farcir dans une liste, puis faites votre fusion finale juste une fois.

int sum = 0; 
for(byte[] ba : arraysList) { 
    sum = sum + ba.length; 
} 
byte[] newbuf = new byte[sum]; 
int curpos = 0; 
for(byte[] ba : arraysList) { 
    System.arraycopy(ba, 0, newbuf, curpos, ba.length); 
    curpos = curpos + ba.length; 
} 

(code non testé, devrait fonctionner, ne pense pas qu'il y ait 1-offs là-dedans.)

Questions connexes