Chiffrage partiel de fichiers

Description

Une ptt application permet a l'utilisateur de sélectionner un bloc d'un chier texte et de ne chi er que ce bloc.Cette même application devra permettre à un utilisateur possédant la clé de lire l'intégralité du chier
et à un utilisateur ne possédant pas la clé de lire la partie apparaissant en clair.

Source / Exemple :


package ProjetCrypto;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.GeneralSecurityException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class Chiffrage {
    private SecretKey key;
    private Cipher decryptor;
    private Cipher encryptor;
    byte[] buf = new byte[1024];
    
    public Chiffrage()
    {
    	key = null;
    	decryptor = null;
    	encryptor = null;
    }
    
    public Cipher setKeyCrypt(String pwd)
    {
    	key = new SecretKeySpec(pwd.getBytes(),"Blowfish");
    	try {
			encryptor = Cipher.getInstance("Blowfish");
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	try {
			encryptor.init(Cipher.ENCRYPT_MODE, key);
		} catch (InvalidKeyException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	return encryptor;
    }
    
    public Cipher setKeyDecrypt(String pwd) 
    {
    	key = new SecretKeySpec(pwd.getBytes(),"Blowfish");
    	try {
			decryptor = Cipher.getInstance("Blowfish");
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	try {
			decryptor.init(Cipher.DECRYPT_MODE, key);
		} catch (InvalidKeyException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	return decryptor;
    }
    
    public Cipher getKeyCrypt()
    {
    	return encryptor;
    }
    
    public Cipher getKeyDecrypt()
    {
    	return decryptor;
    }
    
    public void encryptFile(File inFile, File outFile, Cipher cipher) throws IOException, GeneralSecurityException
    {
		InputStream in = new BufferedInputStream(
				new FileInputStream(inFile));
		OutputStream out = new BufferedOutputStream(
				new FileOutputStream(outFile));

		int nl; //nbr d'octets réellement lus
		byte[] buffer = new byte[1024];
		while((nl = in.read(buffer)) != -1)
		{
			out.write(cipher.update(buffer,0,nl));
		}
		
		out.write(cipher.doFinal());
		out.flush(); //fermer le flux et écrir dans le fichier
		in.close();
		out.close();
    }
    
    public void encryptFile(String inFileName, String outFileName,Cipher cipher) throws IOException, GeneralSecurityException
    {
    	encryptFile(new File(inFileName), new File(outFileName), cipher);
    }
    
    public void decryptFile(File inFile, File outFile, Cipher cipher) throws IOException
    {
		InputStream in = new BufferedInputStream(
				new FileInputStream(inFile));
		OutputStream out = new BufferedOutputStream(
				new FileOutputStream(outFile));
		//les bytes a lu dans le in qui va décrypter
		in = new CipherInputStream(in, cipher);
		
		//lire in en décrypter et ecrire dans la sortie
		int numRead = 0;
		while((numRead = in.read(buf)) >= 0)
		{
			out.write(buf, 0, numRead);
		}
		in.close();
		out.close();
		
    }
    
    public void decryptFile(String inFileName, String outFileName, Cipher cipher) throws IOException
    {
    	decryptFile(new File(inFileName), new File(outFileName), cipher);
    }

}

Conclusion :


Je travaille avec une composant "Visual Editor" de eclipse 3.2

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.