/ / Cryptage Android / Problème de décryptage - Android, cryptage

Problème de cryptage / décryptage Android - Android, cryptage

Je fais un cryptage de déchiffrement de fichier dans Android, à cette fin, j'utilise le code suivant

private void encryptFile()
{
try
{
File f = new File(Environment.getExternalStorageDirectory() + "/images.jpg");
FileInputStream in = new FileInputStream(f);
byte[] buffer = new byte[100];
int num = in.read(buffer, 0, 100);
Encryption mEncryption = new Encryption("test");
File tempFile = new File(Environment.getExternalStorageDirectory() + "/temp.jpg");
FileOutputStream os = new FileOutputStream(tempFile);
os.write(mEncryption.encrypt(buffer), 0, 100);
while(in.read(buffer) != -1)
{
os.write(buffer);
}
in.close();
os.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}

private void decryptFile()
{
try
{
File f = new File(Environment.getExternalStorageDirectory() + "/temp.jpg");
FileInputStream in = new FileInputStream(f);
byte[] buffer = new byte[100];
in.read(buffer, 0, 100);
Encryption mEncryption = new Encryption("test");
File tempFile = new File(Environment.getExternalStorageDirectory() + "/images.jpg");
FileOutputStream os = new FileOutputStream(tempFile);
os.write(mEncryption.decrypt(buffer), 0, 100);
while(in.read(buffer) != -1)
{
os.write(buffer);
}
in.close();
os.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}

mais quand je décrypte le fichier me donne IllegalBlockSizeException: last block incomplete in decryption une idée pourquoi sa passe?

Modifier: J'utilise ceci Classe de chiffrement

Réponses:

0 pour la réponse № 1

Il y a beaucoup de problèmes potentiels avec ce code. Quel est le Encryption classe? Il ne fait pas partie du SDK Android standard. N'avez-vous pas l'intention de chiffrer tout le fichier? Ce code ne chiffre que les 100 premiers octets. Et c'est là que réside le principal défaut. Le code suppose ensuite que les 100 premiers octets du fichier d’entrée contiendront des données cryptées, ce qui est une hypothèse invalide. Les données cryptées seront, pour commencer, normalisées à la longueur de la taille de bloc de l'algorithme de cryptage.


2 pour la réponse № 2

la classe de chiffrement que vous utilisez a été postée sur mon blog, comme vous l'avez dit ( http://blog.kotowicz.net/2010/09/story-of-android-cryptography-and.html ) mais comme exemple de la façon dont vous devriez implémenter le cryptage! Il présente certains problèmes de bourrage et d’extension de clé, tous mentionnés dans l’article de blog.

La classe provient de la source de cette classe provient du projet Android Remote Notifier. Si vous en avez vraiment besoin, utilisez au moins la version corrigée http://code.google.com/p/android-notifier/source/browse/trunk/AndroidNotifier/src/org/damazio/notifier/util/Encryption.java - la version de mon article a de sérieux problèmes.

Comme Nic Strong l'a mentionné, vous rencontrez des problèmes de rembourrage - les codes de bloc s'alignent sur la taille du bloc et vous devez en tenir compte.