8
votes

Comment puis-je forcer une cipheroutputTream à finir de crypter mais laissez le courant sous-jacent ouvert?

J'ai un cipheroutputTream soutenu par une autre sortie. Après avoir fini d'écrire toutes les données dont j'ai besoin crypté vers le CiPherOutPutStream, j'ai besoin d'apporter des données non chiffrées.

La documentation pour CiPherOutPutStream dit que l'appelant flush () ne forcera pas le bloc final hors du crypteur; Pour cela, je dois appeler fermer () . Mais fermer () ferme également la sortie sous-jacente, que j'ai toujours besoin d'écrire plus à.

Comment puis-je forcer le dernier bloc du crypteur sans fermer le courant? Dois-je écrire ma propre non -ClossiCiPiPhePutStream?


0 commentaires

3 Réponses :


0
votes

Si vous avez une référence à l'objet Cipher que le CIPHEROutPutStream enveloppe, vous devriez pouvoir faire ce que ciIPherOutPutStream.close () fait:

Call chiffre .dOfinal , puis Flush () Le CIPEROutPutStream et continuer.


1 commentaires

J'ai donc voté cela au départ parce que cela semblait être une bonne idée, mais ce n'est pas le cas. Cipher.DOfinal () renvoie les mêmes octets de plus et plus, donc si vous les insérez manuellement dans le flux de sortie, écrivez plus de choses et fermez éventuellement le cipherOutputStream, ils sont à nouveau insérés.



8
votes

Si vous n'avez pas de référence au Cipher , vous pouvez passer un FilterOutPutStream à la méthode qui crée le ciIPherOutPutStream . Dans le FilterOutPutStream , remplace la méthode Fermer de sorte qu'elle ne ferme pas réellement le flux.


1 commentaires

J'utiliserais cette réponse comme la base de la création de quelque chose comme votre non-clothérouxputtream, mais inspiré par l'exemple de digestoutputtream.on (...) Je créerais un ciphérfinish () Méthode après quoi le flux passe simplement des données sur le système d'exploitation sous-jacent.



1
votes

Peut-être que vous pouvez envelopper votre sortie de sortie avant de mettre dans un cipheroutputTrestream xxx

espoir qui aide


0 commentaires