sebastianb
Erfahrenes Mitglied
Hallo zusammen,
aus Spaß an der Sache wollte ich gerade ein Beispiel von Thomas, das ich hier im Forum gefunden habe, ein wenig erweitern. Ziel sollte es eigentlich sein ein Bild einzulesen um es danach wieder verschlüsselt abzuspeichern, nur leider will mein vll etwas naiver Lösungsansatz nicht so richtig.
das eigentlich Problem ist, dass ich beim Aufruf von
ein leeres Array geliefert bekomme. Leider fehlt mir hier aber ein wenig das Basiswissen um selber auf den Fehler zu kommen.
Viele Dank euch schonmal
Sebastian
aus Spaß an der Sache wollte ich gerade ein Beispiel von Thomas, das ich hier im Forum gefunden habe, ein wenig erweitern. Ziel sollte es eigentlich sein ein Bild einzulesen um es danach wieder verschlüsselt abzuspeichern, nur leider will mein vll etwas naiver Lösungsansatz nicht so richtig.
Java:
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
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 javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
public class Temp
{
private static byte[] loadImage() throws IOException
{
File file = new File("c:/krypto/test.jpeg");
BufferedImage bufferedImage = ImageIO.read(file);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "jpeg", byteArrayOutputStream);
return byteArrayOutputStream.toByteArray();
}
private static void saveImage(byte[] image) throws IOException
{
File file = new File("c:/krypto/test.cry");
FileOutputStream foStream = new FileOutputStream(file);
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
oStream.write(image);
oStream.writeTo(foStream);
}
public static void main(String[] args) throws Exception
{
String algorithm = "RSA";
KeyPair keyPair = KeyPairGenerator.getInstance(algorithm).generateKeyPair();
File publicKeyFile = new File("c:/krypto/key.txt");
writeKey(keyPair.getPublic(), publicKeyFile);
PublicKey publicKey = readPublicKey(publicKeyFile);
Cipher cipher = Cipher.getInstance(algorithm);
byte[] tmp = encrypt(loadImage(), cipher, publicKey);
saveImage(tmp);
}
private static byte[] encrypt(byte[] data, Cipher cipher, PublicKey publicKey) throws Exception
{
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
ByteArrayOutputStream baosEncryptedData = new ByteArrayOutputStream();
CipherOutputStream cos = new CipherOutputStream(baosEncryptedData, cipher);
cos.write(data);
cos.flush();
cos.close();
return baosEncryptedData.toByteArray();
}
private static PublicKey readPublicKey(File file) throws Exception
{
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file));
PublicKey publicKey = (PublicKey) objectInputStream.readObject();
objectInputStream.close();
return publicKey;
}
private static void writeKey(PublicKey publicKey, File file) throws Exception
{
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file));
objectOutputStream.writeObject(publicKey);
objectOutputStream.close();
}
}
das eigentlich Problem ist, dass ich beim Aufruf von
Java:
byte[] tmp = encrypt(loadImage(), cipher, publicKey);
ein leeres Array geliefert bekomme. Leider fehlt mir hier aber ein wenig das Basiswissen um selber auf den Fehler zu kommen.
Viele Dank euch schonmal
Sebastian