5 votes

Créer un fichier protégé par un mot de passe en java

Je voudrais créer un fichier protégé par un mot de passe en JAVA. Ce que je veux dire, c'est qu'une fois que je lance le programme, un fichier créé par mon programme serait directement protégé par un mot de passe déterminé au préalable.

Existe-t-il un moyen simple de le faire ?

Encore une fois, mon objectif n'est pas de créer un fichier et de lui ajouter ensuite un mot de passe, mais de protéger le fichier par un mot de passe dès sa création. En fait, je veux que le programme d'exécution actuel n'ait pas accès à la lecture/édition du fichier créé SAUF s'il a le mot de passe précédemment défini.

Quoi qu'il en soit, si certains d'entre vous connaissent un moyen simple de protéger les fichiers lors de leur écriture grâce à java, je leur en serais très reconnaissant.

Passez une bonne journée !

3voto

Enno Shioji Points 12298

Vous voulez crypter votre fichier (son contenu) avec un mot de passe. Voici une bibliothèque assez bien connue pour le faire : http://www.jasypt.org/

Sur leur site :

..encrypting and decrypting a text...

BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword(myEncryptionPassword);
String myEncryptedText = textEncryptor.encrypt(myText);
...
String plainText = textEncryptor.decrypt(myEncryptedText);

Vous pouvez lire/écrire le contenu crypté dans votre fichier.

1voto

Pedro Ruschel Points 66

Lorsque vous souhaitez chiffrer des fichiers, des chaînes de caractères, etc., il existe deux approches principales. Vous devriez commencer par créer une classe ou une méthode pour convertir votre chaîne/fichier en un tableau d'octets. Construisez une autre méthode pour reconvertir le tableau d'octets en chaîne/fichier.

Vous pouvez crypter un fichier en utilisant 2 approches : 1 - Clé symétrique - Un mot secret (généralement une énorme chaîne de caractères ou un mot de passe défini par l'utilisateur) cryptera votre fichier et votre mot de passe, et le même mot de passe sera utilisé pour le décrypter. 2 - Clé asymétrique - Vous générez une paire de clés. L'une est appelée clé publique et l'autre est appelée clé privée. Les clés publiques sont utilisées pour crypter les fichiers, les clés privées pour les décrypter. Il s'agit de l'approche la plus "professionnelle".

Si vous voulez une approche vraiment sûre, vous devriez télécharger GnuPG. GnuPG est un exécutable qui gère le cryptage asymétrique, vous pouvez construire une classe pour travailler avec GnuPG et laisser GnuPG gérer votre processus de cryptage/décryptage.

Il existe une approche non sûre qui est "native" de Java (clé symétrique) et qui pourrait vous convenir :

Le cryptage :

byte[] key = //... password converted to an array of bytes
byte[] dataToSend = ...

Cipher c = Cipher.getInstance("AES");
SecretKeySpec k =
  new SecretKeySpec(key, "AES");
c.init(Cipher.ENCRYPT_MODE, k);
byte[] encryptedData = c.doFinal(dataToSend);

Décryptage :

byte[] key = //
byte[] encryptedData = //

Cipher c = Cipher.getInstance("AES");
SecretKeySpec k =
  new SecretKeySpec(key, "AES");
c.init(Cipher.DECRYPT_MODE, k);
byte[] data = c.doFinal(encryptedData);

J'espère que cela vous aidera.

1voto

Thorn Points 2806

Si le fichier est un fichier texte brut, le fait de ne pas donner à l'utilisateur l'accès au fichier sans mot de passe dans votre programme ne protège pas vraiment les données par mot de passe, car l'utilisateur peut simplement ouvrir le fichier avec un autre programme. Donc SI le fichier est un fichier texte, alors je pense que vous devez utiliser le cryptage.

Vous pouvez utiliser le commentaire de @mazaneicha pour vous aider à démarrer dans cette direction. Si vous souhaitez vous plonger davantage dans ce domaine, vous pouvez consulter l'article de Architecte Java Cryptographie y el docs javax.crypto java .

Si votre fichier n'est pas lisible par l'homme, et que seul votre programme le comprend, alors je ferais de la première ligne ou des n premiers octets du fichier un mot de passe. Si vous préférez, vous pouvez enregistrer un autre fichier de mots de passe dans le même répertoire et l'utiliser pour authentifier l'utilisateur avant de décider s'il a le droit de consulter le fichier. Une façon courante de crypter un mot de passe est d'utiliser une fonction de hachage MD5. L'utilisateur saisit un mot de passe, vous calculez le hachage de celui-ci, puis comparez le hachage calculé avec la valeur de hachage lue dans le fichier :

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * Use to encrypt passwords using MD5 algorithm
 * @param password should be a plain text password.
 * @return a hex String that results from encrypting the given password.
 */
static String encryptPassword(String password) {
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(password.getBytes());
        byte byteData[] = md.digest();
        StringBuilder hexString = new StringBuilder();
        for (int i=0;i<byteData.length;i++) {
            String hex=Integer.toHexString(0xff & byteData[i]);
            if(hex.length()==1) 
               hexString.append('0');
            hexString.append(hex);
        }
        return hexString.toString();
    }
    catch(java.security.NoSuchAlgorithmException missing) {
        return password;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X