Entschlüsseln einer Datei funktioniert nicht

pizza1234

Erfahrenes Mitglied
Hallo,
ich versuche gerade mit Java-Bordmitteln eine Datei zu ver- und entschlüsseln.
Die Datei zu verschlüsseln ist kein Problem, aber die Entschlüsselung funktioniert einfach nicht! Vielleicht sehe ich ja den Wald vor lauter Bäumen nicht oder bin schon halb im Wochenende, aber ich weiß echt nicht mehr, woran es liegen kann!
Code:
package de.etss.core.security;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;

import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;

import junit.framework.TestCase;

public class DeEncryptTest extends TestCase
{

	private PublicKey publicKey;
	private PrivateKey privateKey;
	private Cipher eCipher;
	private Cipher dCipher;
	
	int len = 0;
	
	File clear 		= new File("C://clear.txt");
	File secret 	= new File("C://secret.txt");
	File unsecret 	= new File("C://unsecret.txt");

	@Override
	protected void setUp() throws Exception
	{
		super.setUp();
	
        eCipher = Cipher.getInstance("RSA");
        dCipher = Cipher.getInstance("RSA");

        KeyPair keyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair();
        publicKey 		= keyPair.getPublic();
        privateKey 		= keyPair.getPrivate();
    	eCipher.init(Cipher.ENCRYPT_MODE, publicKey);
    	dCipher.init(Cipher.DECRYPT_MODE, privateKey);
			
	}

	//verschlüsseln mit public-key
	public void testEncrypt()
	{			
		FileInputStream fis;
		FileOutputStream fos;
		CipherOutputStream cos;
		try
		{
			fis = new FileInputStream(clear);
			fos = new FileOutputStream(secret);
			cos = new CipherOutputStream(fos,eCipher);

			byte[] buffer 	= new byte[8192];
			len 			= fis.read(buffer);

			cos.write(buffer, 0, len);
			cos.flush();
			fis.close();
			cos.close();
			fos.close();
			
		} catch (FileNotFoundException e)
		{	
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	//entschlüsseln mit private-key
	public void testDecrypt() 
	{
		FileInputStream fis;
		FileOutputStream fos;
		CipherInputStream cis;

		try
		{
			fis 	= new FileInputStream(secret);
			assertTrue(fis.read() > 0);
			
			fos		= new FileOutputStream(unsecret);
			cis 	= new CipherInputStream(fis, dCipher);
			
			//Fehler!Wieso ist in cis nix drin?
			assertTrue(cis.read() > 0);
			
			byte[]buffer = new byte[8192];
	
			while((len = cis.read(buffer)) >= 0)
				fos.write(buffer,0,len);

			fos.flush();
			cis.close();
			fis.close();
			
		} catch (FileNotFoundException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		}
	}
	
}

Außerdem wollt ich fragen, ob es Best-Practises gibt zum Verschlüsseln großer Dateien (bis 50MB) auf dem Server?

Grüße,
Peter
 

Neue Beiträge

Zurück