Verschlüsselung

Ich hab das jetzt mal mit byte gemacht, jetzt hab ich nur das problem, wenn ich die verschlüsselung rückgängig mache, kommen bei den zahlen die größer waren als 255, also dann negative zahlen waren, nicht wieder das richtige raus.
wie kann man das denn lösen
 
Zahlen die größer waren als 255 Das geht nicht wenn die Bytes verschlüsselt hast. Zahlen
> 127 werden als negative dargestellt.

z.B.:

200 = -56 (als Byte, da > 127 deshalb wird es so berechnet: zahl(-56)+256 = 200).

D.h. wenn du eine Byte -56 hast, steht in der Datei eine 200(Als Byte, nicht als Text).

Oder was geht nicht?
 
Was passiert denn wenn die zahl über 200.000 ist? ich glaube dann kommt es nicht mehr so ganz hin, oder?
 
Hallo!

Hier mal ein Beispiel für asynchrone Verschlüsselung über Public Key Verfahren.
Hierbei verwenden wir zum verschlüsseln den öffentlichen Schlüssel (Public Key) und zum entschlüsseln den privaten Schlüssel (private key).

Java:
package de.tutorials;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.security.KeyPair;
import java.security.KeyPairGenerator;

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

   public class SimpleChiffreExample {

   	/**
   	 * @param args
   	 */
   	public static void main(String[] args) throws Exception {

   		String data = "www.tutorials.de";

   		System.out.println("Plain text data: " + data);

   		Cipher cipher = Cipher.getInstance("RSA");
   		KeyPair keyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair();
   		cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());

   		ByteArrayOutputStream baosEncryptedData = new ByteArrayOutputStream();
   		CipherOutputStream cos = new CipherOutputStream(baosEncryptedData,
   				cipher);

   		cos.write(data.getBytes("UTF-8"));
   		cos.flush();
   		cos.close();

   		System.out.println("Encrypted data: "
 				+ new String(baosEncryptedData.toByteArray(),"UTF-8"));

   		cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
   		CipherInputStream cis = new CipherInputStream(new ByteArrayInputStream(
 				baosEncryptedData.toByteArray()), 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();

   		System.out.println("Decrypted data: "
 				+ new String(baosDecryptedData.toByteArray(),"UTF-8"));

   	}
   }

Gruß Tom
 
In welcher Java-Version ist das denn enthalten. Bei mir kommt nämlich der fehler dass für RSA kein algorithmus hätte
 
Ok, dann muss ich mal warten bis ich an meinen rechner komme. Danke für deine Hilfe.

Ich möchte immer noch selbst ne RSA-Methode schreiben, das finde ich interessanter :)

Mal schauen ob ich das hin bekomme :)
 
Hallo !
das Beispiel funktioniert bei mir.
Allerdings gelingt es mir nicht die generierten Schlüssel zu speichern und so den Text auf einem anderen PC wieder zu entschlüsseln. In welchem Format sollte ich die Keys am besten abspeichern?

mfg
Simon
 
Hallo!

Es kann sein, das auf den beiden Maschinen unterschiedliche encodings für Strings verwendet wurden. Wenn man unter Java einen String aus einem byte[] baut dann "sollte" man auch immer das gleiche Encoding verwenden. Dies kann man nur garantieren wenn man im Konstruktor von String das encoding mit angibt. -> Hab mein Beispiel (Auf Seite 1) entsprechend angepasst... versuchs noch mal.

Gruß Tom
 
Hallo,
ich hab eine kleine Frage an Thomas.
Und zwar erzeugt dein Programm ja den Key auf einem Rechner.
Wenn ich den jetzt aber zB. speichern oder übers Netz schicken möchte wie bekomme ich den dann und wie verschlüssele ich als "Fremder" mit dem publicKey

MfG Jens
 

Neue Beiträge

Zurück