Je décrypte un fichier XML à partir du système de fichiers à l'aide de Bouncy Castle. Je publie le texte déchiffré et obtient une erreur fatale SAXParseException sur le tout dernier octet de données. Voici ma méthode de décryptage et la configuration de l'objet chiffré. J'ai d'abord utilisé des flux chiffrés, et tout a fonctionné parfaitement (le code commenté était mon flux). En raison des fichiers de politique et des utilisateurs finaux n'ayant pas les versions 256 bits illimitées, j'ai besoin d'utiliser le château gonflable.BouncyCastle Last Byte Decrypt Problème
Des idées pour lesquelles l'octet final ne passe pas?
De Constructor:
keyParam = new KeyParameter(key);
engine = new AESEngine();
paddedBufferedBlockCipher =
new PaddedBufferedBlockCipher(new CBCBlockCipher(engine));
Décrypter Méthode:
public void decrypt(InputStream in, OutputStream out) {
try
{
paddedBufferedBlockCipher.init(false,
new ParametersWithIV(keyParam, _defaultIv));
// cipher.init(Cipher.DECRYPT_MODE, secretKey, ivs);
// CipherInputStream cipherInputStream
// = new CipherInputStream(in, cipher);
byte[] buffer = new byte[4096];
byte[] outBuffer = new byte[4096];
for (int count = 0; (count = in.read(buffer)) != -1;) {
paddedBufferedBlockCipher.processBytes(buffer, 0,
count, outBuffer, 0);
out.write(outBuffer, 0, count);
}
}
catch(Exception e) {
e.printStackTrace();
}
}
[Fatal Error] :40:23: Element type "Publi" must be followed by either attribute specifications, ">" or "/>".
org.xml.sax.SAXParseException: Element type "Publi" must be followed by either attribute specifications, ">" or "/>".
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:264)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:292)
Que je ne suis pas sûr de, je n'ai jamais eu à vérifier avec l'option de flux. Comme je fais cela dans la boucle, je n'ai pas besoin du doFinal() et je suppose que cela fonctionnerait bien. Je vais faire un System out pour la variable "count" et voir quel est le dernier numéro imprimé –
Wrong: "Traite le dernier bloc dans le buffer Si le buffer est actuellement plein et ** le padding doit être ajouté ** un appel toFinal produira 2 * getBlockSize() octets. " – akarnokd