2010-12-09 6 views
1

J'évalue actuellement un projet où des informations personnelles hautement sensibles sont traitées et doivent donc être cryptées. Nous parlons comme plusieurs centaines de mégaoctets de fichiers multimédia, comme MP3 ou autre chose. L'application sera certainement implémentée en Java avec JavaFX en GUI/Frontend. Maintenant, je suis à la recherche d'une solution réalisable pour protéger ces données d'une mauvaise utilisation involontaire/intentionnelle. Les données doivent être cryptées en quelque sorte. L'utilisateur doit fournir des informations de connexion avant d'utiliser le logiciel, il est donc possible d'utiliser le mot de passe pour déverrouiller une clé utilisée pour la cryptographie symétrique. Les utilisateurs de l'application seront non professionnels, donc des choses comme TrueCrypt ou des solutions similaires ne feront pas l'affaire. Bien qu'une solution transparente serait préférable. Alors, existe-t-il une solution (semi-) standard pour ce problème?Cryptage des données d'application sensibles en Java

Merci pour l'aide

Salutations,

Andreas

+0

Avez-vous essayé de jeter un oeil à JCE (Java Cryptography Extension) ? http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136007.html et http://download.oracle.com/javase/1.4.2/docs/guide/security/jce/ JCERefGuide.html – Pushkar

+0

En fait, c'était un bon indice, mais j'étais plus à la recherche d'une bibliothèque prête à l'emploi qui fournit tout pour moi. Mais les classes Cipher {Input, Output} Stream semblent bonnes et il devrait être difficile de créer une sorte de wrapper autour d'elles pour fournir un cryptage transparent pour certains fichiers. –

Répondre

2

La méthode suivante crypte un tableau d'octets donné, où keyC est la clé de cryptage. initalVector est le vecteur initial utilisé pour le chiffrement. Ce vecteur est généralement utilisé pour le cryptage AES en mode compteur (CTR), mais n'est pas nécessaire pour les autres modes. C'est un tableau d'un certain 16 octets, utilisé pour le cryptage et le décryptage.

private byte[] encryptAES128(byte[] input, byte[] initialVector) { 
    SecretKey aeskey = new SecretKeySpec(keyC, 0, 16, "AES"); 
    AlgorithmParameterSpec paramSpec = new IvParameterSpec(initialVector); 
    cipher = Cipher.getInstance("AES/CTR/NOPADDING"); 
    getAesCTRCipher().init(Cipher.ENCRYPT_MODE, aeskey, paramSpec); 
    return getAesCTRCipher().doFinal(input); 
} 

Cette méthode renvoie un nouveau tableau d'octets, étant le tableau d'entrée chiffré. Il fonctionne toujours en blocs de 16 octets. Pour les fichiers plus volumineux, vous devez exécuter une boucle for sur les octets et concaténer le résultat :)

Bonne chance!

Edit: Après le cryptage d'un bloc de 16 octets, vous devez incrémenter le vecteur initial, qui est si le cryptage fonctionne en mode compteur :)

+0

Ce n'est pas exactement répondre à la question car je ne veux rien avoir à faire avec les internes de la crypto où les choses peuvent mal se passer, c'est-à-dire en oubliant d'incrémenter le IV. À mon avis, ces choses sont sujettes à erreur –

+0

Il existe d'autres modes de cryptage que CTR, qui ne nécessitent pas de IV. Imo c'est une solution très pratique – Kr1z

-3

Utilisez un algorithme de chiffrement à clé publique, comme RSA. fort, presque incassable et facile à utiliser et à comprendre. il y a probablement même une méthode ou même une classe pour RSA ou des cryptages similaires en Java.

+1

Pas vraiment une réponse, et pas vraiment correct non plus. –

+0

La théorie de le faire est très clair pour moi en tant que commandant en informatique. Mais faire le chiffrement par soi-même est dans la plupart des cas une très mauvaise idée. –

Questions connexes