Verschlüsselung

Status
Nicht offen für weitere Antworten.

krihue

Mitglied
Hallo,
ich versuche jetzt seit 2 Stunden mit der Verschlüsselung klarzukommen aber ich habe nirgendwo die enstprechende Lösung gefunden. Es sollen einfach zwei Funktion entstehen, womit ich mittels individuellen Passwort(und auch unterschiedliche Passwortlänge) ver- und entschlüsseln kann.
Code:
private byte[] verschluesseln(String verschluesselungsString, String passwortkey) {
		byte verschluesselt[] = null;
		try {
			Key k = new SecretKeySpec(passwortkey.getBytes(), "Blowfish");
			Cipher cipher = Cipher.getInstance("Blowfish");
			cipher.init(Cipher.ENCRYPT_MODE, k);
			verschluesselt = cipher.doFinal(verschluesselungsString.getBytes());
			return verschluesselt;

		} catch (Exception e) {
			System.out.println(e.getMessage());
			return verschluesselt;
		}

	}

	private String entschluesseln(byte verschluesseltebytes[], String passwortkey) {
		try {
			Key k = new SecretKeySpec(passwortkey.getBytes(), "Blowfish");
			Cipher cipher = Cipher.getInstance("Blowfish");
			cipher.init(Cipher.DECRYPT_MODE, k);
			byte unverschlüsselt[] = cipher.doFinal(verschluesseltebytes);

			String s = "";
			for (int i = 0; i < unverschlüsselt.length; i++) {
				char interim = (char) unverschlüsselt[i];
				s += interim;
			}
			return s;

		} catch (Exception e) {
			System.out.println(e.getMessage());
			return null;
		}

	}

Der test mit:

Code:
String wertzumverschluesseln = "Hallo2";
		String passwort = "asdasds";
		
		System.out.println("Verschlüsselt wird: ## " + wertzumverschluesseln + " ## mit ## " + passwort + " ##");
		
		byte[] codebytes = verschluesseln(wertzumverschluesseln, passwort);
		String s = "";
		for (int i = 0; i < codebytes.length; i++) {
			char interim = (char) codebytes[i];
			s += interim;
		}
		System.out.println("Verschlüsselungsergebniss: " + s);
		
		System.out.println("Entschlüsselt: " + entschluesseln(codebytes, passwort));

Die Variable "byte codebytes" soll dann in ein Arraylist rein, welches dann serialisiert gespeichert wird. Lasse ich mir aber nur die "codebytes" ausgeben, kommt immer das gleiche raus. Mit dem String aber nicht. Muss ich dann den String speichern und wie bin ich flexibler mit dem Key (Blowfish = 16 bytes)?

Hoffentlich konnte ich es etwas klar rüberbringen :D
Danke im Voraus.
 

krihue

Mitglied
der fehler der byte-ausgabe liegt bestimmt an dem hier:
Code:
System.out.println(codebytes);
Das Array ändert sich im Debug-Modus aber wiso nicht die Ausgabe?
 

abollm

Top Contributor
Ich habe hier noch ein Java-Programm herumliegen, das - glaube ich mindestens - alles das kann, was du möchtest/vorhast.

Wenn du interessiert bist, poste ich den Code hier.
 

dieta

Top Contributor
Ich habe hier noch zwei seeeeehr alte Methoden zum Kodieren von Strings. Sind zwar nicht sehr platzsparend, aber dafür sieht der Kodierte Text nacher schön übersichtlich aus:
Code:
String kodiere(String i, String p)
	{
		String in = i;
		String out= "";
		int laenge = in.length();
		char[] ch = in.toCharArray();
		String pw = p;
		char[] pwChar = pw.toCharArray();
		int pwLaenge = pw.length();
		if(pw.equals(""))
		{
			pw = " ";
		}
		while(pwLaenge<laenge)
		{
			pw+=pw;
			pwLaenge=pw.length();
		}
		char[] pwCh = pw.toCharArray();
		for(int g=0;g<=laenge-1;g++)
		{
			int[] outCh = new int[2];
			int zufall = (int) (Math.random()*(int) ch[g]);
			outCh[0]= (int) pwCh[g] + zufall;
			outCh[1]=(((int)ch[g]) - zufall) + (int) pwCh[g];
			out=out+Integer.toString(outCh[0])+";"+Integer.toString(outCh[1])+";";
		}
		return out;
		
	}
	
	String dekodiere(String rein, String pass)
	{
		String in = rein;
		String out= "";
		int laenge = in.length();
		String[] ch = in.split(";");
		String pw = pass;
		char[] pwChar = pw.toCharArray();
		int pwLaenge = pw.length();
		if(pw.equals(""))
		{
			pw = " ";
		}
		while(pwLaenge<laenge)
		{
			pw+=pw;
			pwLaenge=pw.length();
		}
		char[] pwCh = pw.toCharArray();
		boolean e=false;
		int c=0;
		for(int i=0;i<=laenge-1;i+=2)
		{
			try
			{
				char outCh;
				//System.out.println(ch[i]+" - "+ch[i+1]);
				outCh = (char) ( (  Integer.parseInt(ch[i] ) ) + (  Integer.parseInt(ch[i+1]) ) - (int) pwCh[c] - (int) pwCh[c] );
				out=out+outCh;
			}
			catch(IndexOutOfBoundsException exc)
			{
				e=true;
			}
			c++;
		}
		
		return out;
	}
 

abollm

Top Contributor
krihue hat gesagt.:
das wäre super, wenn du das machen würdest.

So, hier der Code, der weitestgehend selbsterklärend ist:
Code:
package crypto;

import java.io.*;
import java.security.*;
import javax.crypto.*;
//import javax.crypto.spec.*;

/**
   This program tests the RSA cipher. Usage:
   java RSATest -genkey public private
   java RSATest -encrypt plaintext encrypted public
   java RSATest -decrypt encrypted decrypted private
*/
public class RSATest
{
    // KEYSIZE
	private static final int KEYSIZE = 512;
	
	// error
	private static boolean rsaError;

	public static void main(String[] args)
   {
		rsaError = false;
      try
      {
         if (args[0].equals("-genkey"))
         {
            KeyPairGenerator pairgen = KeyPairGenerator.getInstance("RSA");
            SecureRandom random = new SecureRandom();
            pairgen.initialize(KEYSIZE, random);
            KeyPair keyPair = pairgen.generateKeyPair();
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(args[1]));
            out.writeObject(keyPair.getPublic());
            out.close();            
            out = new ObjectOutputStream(new FileOutputStream(args[2]));
            out.writeObject(keyPair.getPrivate());
            out.close();            
         }
         else if (args[0].equals("-encrypt"))
         {
            KeyGenerator keygen = KeyGenerator.getInstance("AES");
            SecureRandom random = new SecureRandom();
            keygen.init(random);
            SecretKey key = keygen.generateKey();

            // wrap with RSA public key
            ObjectInputStream keyIn = new ObjectInputStream(new FileInputStream(args[3]));
            Key publicKey = (Key) keyIn.readObject();
            keyIn.close();            

            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.WRAP_MODE, publicKey);
            byte[] wrappedKey = cipher.wrap(key);
            DataOutputStream out = new DataOutputStream(new FileOutputStream(args[2]));
            out.writeInt(wrappedKey.length);
            out.write(wrappedKey);

            InputStream in = new FileInputStream(args[1]);
            cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.ENCRYPT_MODE, key);
            crypt(in, out, cipher);
            in.close();
            out.close();
         }
         else
         {
            DataInputStream in = new DataInputStream(new FileInputStream(args[1]));
            int length = in.readInt();
            byte[] wrappedKey = new byte[length];
            in.read(wrappedKey, 0, length);
            
            // unwrap with RSA private key
            ObjectInputStream keyIn = new ObjectInputStream(new FileInputStream(args[3]));
            Key privateKey = (Key) keyIn.readObject();
            keyIn.close();            

            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.UNWRAP_MODE, privateKey);
            Key key = cipher.unwrap(wrappedKey, "AES", Cipher.SECRET_KEY);

            OutputStream out = new FileOutputStream(args[2]);
            cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.DECRYPT_MODE, key);

            crypt(in, out, cipher);
            in.close();
            out.close();
         }
      }
      catch (IOException e)
      {
    	 rsaError = false;
         e.printStackTrace();
      }
      catch (GeneralSecurityException e)
      {
     	 rsaError = false;
    	 System.out.print("GeneralSecurityException: ");
         e.printStackTrace();
      }
      catch (ClassNotFoundException e)
      {
     	 rsaError = false;
    	 e.printStackTrace();
      }
   }

   /**
      Uses a cipher to transform the bytes in an input stream
      and sends the transformed bytes to an output stream.
      @param in the input stream
      @param out the output stream
      @param cipher the cipher that transforms the bytes
   */
   public static void crypt(InputStream in, OutputStream out,
      Cipher cipher) throws IOException, GeneralSecurityException
   {
      int blockSize = cipher.getBlockSize();
      int outputSize = cipher.getOutputSize(blockSize);
      byte[] inBytes = new byte[blockSize];
      byte[] outBytes = new byte[outputSize];

      int inLength = 0;;
      boolean more = true;
      while (more)
      {
         inLength = in.read(inBytes);
         if (inLength == blockSize)
         {
            int outLength = cipher.update(inBytes, 0, blockSize, outBytes);
            out.write(outBytes, 0, outLength);
         }
         else more = false;         
      }
      if (inLength > 0)
         outBytes = cipher.doFinal(inBytes, 0, inLength);
      else
         outBytes = cipher.doFinal();
      out.write(outBytes);
   }
   

}
 

krihue

Mitglied
danke für den code.

nur arbeitest du hier mit schlüsselpaaren, was mir nicht ganz behilflich ist. ich will einfach nur ein passwort benutzen, um den text zu verschlüsseln.
 

krihue

Mitglied
genau das hatte ich angefangen zu lesen. nun habe ich verschiedene algoritmen probiert aber keiner geht außer blowfish. dieser geht zwar nur bis 16 zeichen aber dafür verlangt er keine feste länge. dann werde ich wohl das passwort kürzen müssen. :shock:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Cäsar Verschlüsselung Java Basics - Anfänger-Themen 8
Camoflasche RSA Verschlüsselung Java Basics - Anfänger-Themen 0
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
M Verschlüsselung mit replace() Java Basics - Anfänger-Themen 35
P Cäsear verschlüsselung irgendwas passt noch nicht Java Basics - Anfänger-Themen 2
A Methoden Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 13
E Einfache Java Verschlüsselung Java Basics - Anfänger-Themen 4
N Erste Schritte JFrame Caesar-Verschlüsselung Java Basics - Anfänger-Themen 23
Y Caesar Verschlüsselung Fehler Java Basics - Anfänger-Themen 4
Ä Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 5
N Caesar Verschlüsselung Java Basics - Anfänger-Themen 2
L Interpreter-Fehler RSA Verschlüsselung Fehler Java Basics - Anfänger-Themen 2
M Erste Schritte Verschlüsselung von text Java Basics - Anfänger-Themen 21
M Erste Schritte Verschlüsselung / Login-Sicherheit Java Basics - Anfänger-Themen 8
D Eine einfache Verschlüsselung schreiben Java Basics - Anfänger-Themen 3
A Vigenere Verschlüsselung Java Basics - Anfänger-Themen 2
B RSA Verschlüsselung für Aktivierunscode Java Basics - Anfänger-Themen 7
T Array Verschlüsselung Java Basics - Anfänger-Themen 5
Z Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 1
V Permutation, Verschlüsselung Java Basics - Anfänger-Themen 19
H Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 1
S Caesar Verschlüsselung Start Hilfe Java Basics - Anfänger-Themen 4
K Symmetrische Verschlüsselung von TextArea Java Basics - Anfänger-Themen 7
U Problem mit Verschlüsselung Java Basics - Anfänger-Themen 2
C Frage zu RSA-Verschlüsselung Java Basics - Anfänger-Themen 3
Y Applet: Verschlüsselung Java Basics - Anfänger-Themen 3
H Caesar-Verschlüsselung - Was stimmt nicht? Java Basics - Anfänger-Themen 6
V Ceasar Verschlüsselung Java Basics - Anfänger-Themen 9
D Verschlüsselung mit Java Java Basics - Anfänger-Themen 8
F Problem: Verschlüsselung von String in Array Fehler Java Basics - Anfänger-Themen 2
C Verschlüsselung Java Basics - Anfänger-Themen 8
R Frage zu Cäsar - Verschlüsselung! Java Basics - Anfänger-Themen 10
I Rc4 Verschlüsselung in BlueJ Java Basics - Anfänger-Themen 18
D Verschlüsselung Java Basics - Anfänger-Themen 4
C Compiler-Fehler Verschlüsselung Java Basics - Anfänger-Themen 2
B byte-weise Verschlüsselung Java Basics - Anfänger-Themen 6
S Caesar-Verschlüsselung Problem/Frage Java Basics - Anfänger-Themen 4
D Java Password verschlüsselung Java Basics - Anfänger-Themen 6
P RSA Verschlüsselung kleines Problem Java Basics - Anfänger-Themen 5
R Verschlüsselung von String Java Basics - Anfänger-Themen 4
J Cäsar Verschlüsselung Java Basics - Anfänger-Themen 12
G Verschlüsselung und Entschlüsselung von Texten Java Basics - Anfänger-Themen 7
D Java Verschlüsselung Java Basics - Anfänger-Themen 8
O Verschlüsselung mit Cipher & Key Java Basics - Anfänger-Themen 9
A Vigenere Verschlüsselung Java Basics - Anfänger-Themen 2
K Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 1
S Hill Verschlüsselung Java Basics - Anfänger-Themen 10
A Einfache java Verschlüsselung HILFE Java Basics - Anfänger-Themen 3
W Xor-Verschlüsselung Java Basics - Anfänger-Themen 15
Y verschlüsselung Java Basics - Anfänger-Themen 10
T Frage zur Verschlüsselung (RSA) Java Basics - Anfänger-Themen 6
A Java Verschlüsselung/Cipher Java Basics - Anfänger-Themen 12
S Verschlüsselung Key Splitting Java Basics - Anfänger-Themen 2
B Again, Verschlüsselung Java Basics - Anfänger-Themen 3
M Caeser Verschlüsselung ganz einfach(nicht für mich) Java Basics - Anfänger-Themen 6
L Frage zur Verschlüsselung in java Java Basics - Anfänger-Themen 3
D Verschlüsselung Java Basics - Anfänger-Themen 4
A verschlüsselung Java Basics - Anfänger-Themen 7
G Vergleich bei MD5-Verschlüsselung Java Basics - Anfänger-Themen 3
zilti md5-Verschlüsselung? Java Basics - Anfänger-Themen 7
L Caesar-Verschlüsselung programmieren Java Basics - Anfänger-Themen 12
Lazybone Vigenere Verschlüsselung funktioniert nicht richtig Java Basics - Anfänger-Themen 8
S XOR-Verschlüsselung Java Basics - Anfänger-Themen 5
U "Einfache Verschlüsselung" Java Basics - Anfänger-Themen 17
E Verschlüsselung mithilfe von Array Java Basics - Anfänger-Themen 2
S SHA? Hashcodes, Blowfish Verschlüsselung Java Basics - Anfänger-Themen 7
L Java und PGP Verschlüsselung, wie...??? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben