Killkrog
Lt. Junior Grade
- Registriert
- Jan. 2006
- Beiträge
- 356
Hallo Jungs und Mädels!
Ich beschäftige mich gerade mit Verschlüsselung und habe dazu zwei Streams geschrieben. Einmal einen OutputStream, der beim Schreiben verschlüsselt, und einen InputStream, der beim Lesen entschlüsselt.
Nun habe ich in einem kleinen Testprogram einen Klartextverschlüsselt und anschließend wieder entschlüsselt. Problem hier ist, dass zwar korrekt entschlüsselt wird, aber nicht vollständig!
Ich denke der Code sollte selbsterklärend sein, da auf das Nötigste beschränkt. Falls nicht, einfach Bescheid geben!
Danke schonmal für eure Hilfe!
AESInputStream.java
AESOutputStream .java
AesTest.java (beinhaltet main-Methode)
Ich beschäftige mich gerade mit Verschlüsselung und habe dazu zwei Streams geschrieben. Einmal einen OutputStream, der beim Schreiben verschlüsselt, und einen InputStream, der beim Lesen entschlüsselt.
Nun habe ich in einem kleinen Testprogram einen Klartextverschlüsselt und anschließend wieder entschlüsselt. Problem hier ist, dass zwar korrekt entschlüsselt wird, aber nicht vollständig!
Ich denke der Code sollte selbsterklärend sein, da auf das Nötigste beschränkt. Falls nicht, einfach Bescheid geben!
Danke schonmal für eure Hilfe!
AESInputStream.java
Code:
public class AESInputStream extends InputStream {
private final InputStream stream;
public AESInputStream(InputStream stream, byte[] aesKey) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException {
Cipher c = Cipher.getInstance("AES");
c.init(Cipher.DECRYPT_MODE, new SecretKeySpec(aesKey, "AES"));
this.stream = new CipherInputStream(stream, c);
}
public int read() throws IOException {
return stream.read();
}
}
AESOutputStream .java
Code:
public class AESOutputStream extends OutputStream {
private final OutputStream stream;
public AESOutputStream(OutputStream stream, byte[] aesKey) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException {
Cipher c = Cipher.getInstance("AES");
c.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(aesKey, "AES"));
this.stream = new CipherOutputStream(stream, c);
}
public void write(int b) throws IOException {
stream.write(b);
}
}
AesTest.java (beinhaltet main-Methode)
Code:
public class AesTest {
public AesTest() throws Throwable {
// generate random 256 bit key
final byte[] aesKey = new byte[256 >> 3];
int len = aesKey.length;
for (int i = 0; i < len; i++) {
aesKey[i] = (byte) ((int) (Math.random() * 256) - 128);
}
final String textToEncrypt = "Ich bin ein Text, der chiffriert werden soll.";
// encrypt text
ByteArrayOutputStream target = new ByteArrayOutputStream();
transferData(new ByteArrayInputStream(textToEncrypt.getBytes()), new AESOutputStream(target, aesKey));
byte[] encryptedData = target.toByteArray();
System.out.println("Chiffrierter Text: " + new String(encryptedData));
// decrypt text
target = new ByteArrayOutputStream();
transferData(new AESInputStream(new ByteArrayInputStream(encryptedData), aesKey), target);
System.out.println("Dechiffrierter Text: " + target.toString());
// Ausgabe >>> "Dechiffrierter Text: Ich bin ein Text"
}
public static void main(String[] args) throws Throwable {
new AesTest();
}
private void transferData(InputStream is, OutputStream os) throws Throwable {
int len, bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
while ((len = is.read(buffer, 0, bufferSize)) != -1) {
os.write(buffer, 0, len);
}
is.close();
os.close();
}
}