La cryptographie en Java
Je suis en train de faire une application qui permet de crypter certains fichiers. Je veux utiliser gnu cryptix de la bibliothèque. Il dit qu'il n'est plus développé depuis 2005, mais j'imagine que c'est tout ce dont j'ai besoin... dois-je utiliser autre chose?
Et j'ai une question à propos du chiffrement d'un fichier unique. Droit maintenant, je le fais avec une boucle comme ceci:
for(int i=0; i+block_size < bdata.length; i += block_size)
cipher.encryptBlock(bdata, i, cdata, i);
Donc ma question est comment chiffrer le dernier bloc qui ne peuvent pas avoir la même taille que le taille_bloc. Je pensais peut-être un devrait ajouter quelques données supplémentaires pour le dernier bloc, mais que je ne sais pas comment décrypter...
Il n'y a vraiment pas besoin de chiffrer chaque bloc séparément vous-même, ce genre de choses est déjà dans l'API, ni avez-vous besoin pour développer vos propres rembourrage mécanisme ("...ajouter des données supplémentaires pour le dernier bloc").
OriginalL'auteur user568021 | 2012-07-29
Vous devez vous connecter pour publier un commentaire.
Je suggère fortement à l'aide du cryptage AES et il est livré avec le SDK JAVA. Jetez un oeil à: À l'aide d'AES avec la Technologie Java qui vous donnera une grande exemple. Lire plus sur le SVE voir: Advanced Encryption Standard - Wikipédia.
Ne jamais utiliser votre propre système de cryptage ou d'une ancienne forme d'un schéma de chiffrement. AES a été essayé et testé par des gens avec beaucoup plus de connaissances dans ce domaine, alors, de sorte que vous savez que cela va fonctionner. Si votre propre ou un vieux schéma de chiffrement de nous risquez de manquer une fatale trou de boucle qui va laisser à nos données ouvertes à des attaques.
Le voir, cette question ici pour voir la différence dans les systèmes de cryptage: Comparaison de DES, Triple DES, AES, blowfish de cryptage pour les données
Addendum:
AES en java fonctionneront sans problème pour 192 et 256 bits clés, mais vous devrez installer la plus récente de la JCE de la Politique de Fichiers. Voir ici et ici. Vous devez également placer les fichiers dans votre JDK ou d'autre il l'habitude de travailler lorsqu'il est exécuté à partir de votre IDE.
Remarque: assurez-vous de télécharger la bonne entreprise criminelle commune, la politique de fichiers, en fonction de votre version de Java j'.e 1.4, 1.5 1.6 ou 7.
Toutefois, si vous utilisez des clés de 128 bits pas besoin de l'installer JCE fichiers.
Ici est un modèle de certains AES utilisation en java utiliser CBC/AES/PKCS5Padding et aléatoires de la IV à l'aide de
RandomSecure
.Note vous avez besoin à la fois la clé et IV de décryptage:
Ouais, c'est preety beaucoup. AES fonctionne très bien... 🙂 Merci
Qui utilise la "BCE" et en mode "PKCS5Padding" padding mécanisme (par défaut). Bien que PKCS5Padding est fine, la BCE ne l'est pas. Vous devez au moins utiliser CBC avec un hasard IV:
"AES/CBC/PKCS5Padding"
ou GCM mode:"AES/GCM/NoPadding"
pendantCipher.getInstance(String): Cipher
.content que tu ai eu de travail. Et prendre note si le commentaire ci-dessus son très correct.
merci pour la correction 🙂
OriginalL'auteur David Kroukamp
J'ai toujours utiliser BouncyCastle
J'utilise aussi le streaming de cadre à la place de la boucle que vous nous décrivez: il traite de la question soulevée. Je vais surtout l'utiliser parce que quand il s'agit de la cryptographie (et le filetage) j'ai rarement confiance à mon propre code, j'ai confiance en les gens qui vivent de manger et de respirer. Voici le code que j'utilise quand je veux "gash" de la cryptographie. c'est à dire je n'ai pas de menace particulière de modèle, et vous voulez juste quelque chose "un peu sûr".
Le codage hexadécimal des touches rend beaucoup plus facile à manipuler /magasin et ainsi de suite. J'utilise "makeKey" ... eh bien ... faire une clé, alors je peux utiliser la clé dans le chiffrer et de déchiffrer des méthodes. Vous pouvez bien sûr revenir en arrière à l'aide de
byte[]
au lieu de hex chaînes de la remise des clés.J'ai retiré certaines de l'interception d'exception pour réduire la taille du code, et
Strings.fromHex
les virages à la corde dans unbyte[]
À l'aide de la BCE mode n'est pas recommandé (voir mon autre commentaire). En outre, il convient de noter que l'utilisation de la BouncyCastle fournisseur est définitivement pas nécessaire dans J2SE, et que
CipherInputStream
peut supprimer touteBadPaddingException
s qui peuvent être levées.+1 pour BouncyCastle. L'une des raisons de la colombie-britannique: stackoverflow.com/questions/2927952/...
OriginalL'auteur Phil Rice
Peut-être vous devriez envisager d'utiliser un
javax.crypto
paquet.Voici un exemple de comment utiliser les Algorithmes:
Le cryptage DES
Espère que cette aide
Désolé, mais mon point est de ne pas encourager à utiliser DES en particulier, mais plutôt sur javax.crypto paquet valide substitution à cryptix mentionné par user568021. DES n'était qu'un exemple, et user568021 ne posez pas de questions sur la méthode de chiffrement. Désolé pour le malentendu ici.
OriginalL'auteur Mark Bramnik
Je voudrais sérieusement réfléchir à deux fois avant d'aller dans cette voie. Le développement du logiciel a été interrompue parce que la norme alternatives existent, et ont un look à la liste de diffusion, il n'y a pas eu d'activité depuis 2009. Dans mon livre, ce qui signifie que le logiciel est abandonné et délaissé logiciel signifie que vous êtes plus ou moins sur votre propre.
Jetez un oeil ici, il y a plusieurs questions et réponses qui peuvent vous aider comme cette une. À première vue intéressant qui pourrait simplifier les choses pour vous (mais toujours en utilisant le standard de l'entreprise criminelle commune de l'infrastructure) est jasypt
veuillez noter que jasypt s'appuie sur bouncycastle - au moins pour les versions récentes (je sais que cette question et la réponse de la vieille)
le caractéristiques toujours dit
Open API for use with any JCE provider, and not only the default Java VM one. Jasypt can be easily used with well-known providers like Bouncy Castle
. Remarque, , et non . D'autre part, avec une dernière mise à jour de 3,5 ans et la plupart du temps mort les liens en charge de ce projet peut tout à fait être en fin de vie aussi.juste point de. jasypt de pom listes bouncycastle que la dépendance peut-être pour les implémentations par défaut
OriginalL'auteur fvu