Thomas Darimont
Erfahrenes Mitglied
Hallo,
ganz einfach:
Du liest Deserialisierst den PublicKey den du geschickt bekommen hast und
machst einfach das was in der encrypt Methode gezeigt wird:
Dann hast du das verschlüsselte byte[] an der Hand, welches du nun zum Server senden kannst.
Auf dem Server musst du's dann wie gehabt mit deinem privaten Schlüssel (den du dir irgendwo (sicher) abgespeichert hast (der Beispielsweise in deinem lokalen KeyStore liegt)) wieder entschlüsseln.
Hier ein kleines Beispiel:
Gruß Tom
ganz einfach:
Du liest Deserialisierst den PublicKey den du geschickt bekommen hast und
machst einfach das was in der encrypt Methode gezeigt wird:
Java:
PublicKey publicKey = readPublicKey(publicKeyFile);
Cipher cipher = Cipher.getInstance(algorithm);
String data = "www.tutorials.de";
byte[] encryptedData = encrypt(data, cipher, publicKey);
System.out.println("Encrypted data: "
+ new String(encryptedData, "UTF-8"));
Auf dem Server musst du's dann wie gehabt mit deinem privaten Schlüssel (den du dir irgendwo (sicher) abgespeichert hast (der Beispielsweise in deinem lokalen KeyStore liegt)) wieder entschlüsseln.
Hier ein kleines Beispiel:
Java:
/**
*
*/
package de.tutorials;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
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;
/**
* @author Tom
*
*/
public class PublicKeyExample {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
String algorithm = "RSA";
KeyPair keyPair = KeyPairGenerator.getInstance(algorithm)
.generateKeyPair();
File publicKeyFile = new File("c:/public.key");
writeKey(keyPair.getPublic(), publicKeyFile);
PublicKey publicKey = readPublicKey(publicKeyFile);
Cipher cipher = Cipher.getInstance(algorithm);
String data = "www.tutorials.de";
byte[] encryptedData = encrypt(data, cipher, publicKey);
System.out.println("Encrypted data: "
+ new String(encryptedData, "UTF-8"));
String decryptedData = decrypt(encryptedData, cipher, keyPair
.getPrivate());
System.out.println("Decrypted data: " + decryptedData);
}
private static String decrypt(byte[] encryptedData, Cipher cipher,
PrivateKey privateKey) throws Exception {
cipher.init(Cipher.DECRYPT_MODE, privateKey);
CipherInputStream cis = new CipherInputStream(new ByteArrayInputStream(
encryptedData), cipher);
ByteArrayOutputStream baosDecryptedData = new ByteArrayOutputStream();
byte[] buffer = new byte[8192];
int len = 0;
while ((len = cis.read(buffer)) > 0) {
baosDecryptedData.write(buffer, 0, len);
}
baosDecryptedData.flush();
cis.close();
return new String(baosDecryptedData.toByteArray(), "UTF-8");
}
private static byte[] encrypt(String 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.getBytes("UTF-8"));
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();
}
}
Gruß Tom