kostenloser Webspace werbefrei: lima-city


Verschlüsseln mit java

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    p*******4

    hi leute,
    also ich möchte folgendes machen hab shcon im bei google gesucht aber nix gefunden....
    also ich würde gerne ein programm oder ein applet das zum beispiel a=1 ;b=2 ;c=3 usw. und dies auch wieder rückgängig machen kann..... also ein text feld wo man nen text reinschreibt und dieser soll dann verschlüsseln also jetzt mit a=1 ;b=2 ;c=3 usw. ! ich kenne mich nicht so gut mit java aus ... kann nur html und php .....
    danke schonmal im voraus
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo,

    wenn es bei dir um einfache Substitutionschiffren geht, sieh dir folgenden Code an.
    Wichtig bei Substitutionschiffren ist jedoch, dass ein Zeichen in genau ein anderes Zeichen umgewandelt wird, z.B: A -> 1, aber nicht M -> 13, da sonst die Umkehrung nicht möglich ist.

    /**
    * 
    * @param wert   - umzuwandelnde Zeichen 
    * @param quelle - Ausgangszeichen
    * @param ziel   - Zielzeichen
    * @return       - Codierte Zeichen
    */
    private String codieren(String wert, String[] quelle, String[] ziel) {
    	String back=new String();
    	//Gehe durch alle Zeichen der Variable wert
    	for (int i=0;i<wert.length();i++) {
    		String zeichen=wert.substring(i,i+1);
    		//Suche das Zeichen in den Ausgangszeichen
    		for (int j=0;j<quelle.length;j++) {
    			if (zeichen.equals(quelle[j])) {
    				//Zielzeichen zum Rückgabewert hinzufügen 
    				back=back+ziel[j];
    			}
    		}
    	}
    	return back;
    }


    Aufrufen kann man die Methode (codieren) mit
    codieren("BCADEF",new String[]{"A","B","C","D","E","F"},new String[]{"1","2","3","4","5","6"});


    Decodieren kann man eine Zeichenkette mit
    codieren("231456",new String[]{"1","2","3","4","5","6"},new String[]{"A","B","C","D","E","F"})


    Ich hoffe, dass dir das hilft
    DT
  4. Mit Zahlen ist etwas schwierig wie divingtiger schon geschrieben hat, doch schau dir doch einfach die ROT13 Kodierung mal an
    http://de.wikipedia.org/wiki/ROT13. Statt eine Ersetzung von Zahlen werden hier Buchstaben verwendet.
  5. k***o

    Wieso schwierig? Man könnte es z.B. so lösen:
    a - 001 oder 01
    b - 002 oder 02
    c - 003 oder 03
    z - 026 oder 26
    -----------
    A - 101 oder 27
    B - 102 oder 28
    C - 103 oder 29
    Z - 126 oder 52

    Dadurch wird ein Buchstabe immer durch drei(oder zwei) Zahlen beschrieben! Und die Umkehrung sollte dabei auch kein Problem darstellen!
  6. Hallo,

    um ein encoding/decoding in Java erfolgreich durchzuführen, solltest Du die die Bibliotheken von Apache (open Source) mal ansehen und ggf. runterladen unter http://commons.apache.org/codec/ . Dies ist der Weg, der am Besten zu einem Ergebnis führt. Apache stellt mit seinen Libraries (Jar-Files) eine Menge an Methoden und Verschlüsselungsalgorithmen zur Verfügung (Base64/MD5 usw.), ohne dass man diese von Grund auf selbst programmieren muss.

    Commons-Codec kümmert sich um die richtige Verschlüsselung hierbei. Du kannst diese Libraries (Jar-Files) natürlich auch mit Applets - die verwendung der Jar-Dateien im Klassenpfad findet über CLASSPATH-Option in dem Applet - Tag statt - problemlos einbinden.

    Hoffe das hilft.
  7. also ... ich will euch jetzt hier nicht mit den bösen public-key-verfahren quälen *RSA* ...
    aber ich denke ein wenig symetrische verschlüsselung *AES* dürftet ihr verkraften

    import java.security.*;
    import java.security.interfaces.*;
    import java.security.spec.*;
    import javax.crypto.*;
    import javax.crypto.interfaces.*;
    import javax.crypto.spec.*;
    import java.math.*;
    import java.util.*;
    import java.io.*;
    public class fileaesc
    {
    	private byte[] iv=null;
    	private byte[] skey=null;
    	private Cipher cc=null;
    	private Cipher dcc=null;
    	private String file=null;
    	private byte[] getMD5sum(String skey) throws Exception
    	{
    		MessageDigest md=MessageDigest.getInstance("MD5");
    		md.reset();
    		md.update(skey.getBytes());
    		byte[] ret=md.digest();
    		return ret;
    	}
    	private void ccc() throws Exception
    	{
    		IvParameterSpec IvParamSpec=new IvParameterSpec(iv);
    		SecretKeySpec keySpec=new SecretKeySpec(skey, "AES");
    		cc=Cipher.getInstance("AES/CBC/PKCS5PADDING");
    		cc.init(1, keySpec, IvParamSpec);
    	}
    	private void cdcc() throws Exception
    	{
    		IvParameterSpec IvParamSpec=new IvParameterSpec(iv);
    		SecretKeySpec keySpec=new SecretKeySpec(skey, "AES");
    		dcc=Cipher.getInstance("AES/CBC/PKCS5PADDING");
    		dcc.init(2, keySpec, IvParamSpec);
    	}
    	public fileaesc(String file, String skey) throws Exception
    	{
    		String buff=new String();
    		String fill="                ";
    		buff=(skey+fill).substring(0, 16);
    		this.skey=getMD5sum(skey);
    		this.iv=buff.getBytes();
    		this.file=file;
    		ccc();
    		cdcc();
    	}
    	public void cryptfile() throws Exception
    	{
    		String ucf=file;
    		String cf=file+".aes";
    		InputStream ucfin=new FileInputStream(new File(ucf));
    		byte[] ucf_ba=null;
    		ByteArrayOutputStream ucf_baos=new ByteArrayOutputStream();
    		int br=0;
    		byte[] tmp=new byte[512];
    		while((br=ucfin.read(tmp))!=-1)
    		{
    			ucf_baos.write(tmp, 0, br);
    		}
    		ucf_baos.close();
    		ucf_ba=ucf_baos.toByteArray();
    		byte[] cf_ba=cc.doFinal(ucf_ba);
    		OutputStream cfout=new FileOutputStream(new File(cf));
    		cfout.write(cf_ba);
    		return;
    	}
    	public void decryptfile() throws Exception
    	{
    		String cf=file;
    		String ucf=file.substring(0, (file.length()-4));
    		InputStream cfin=new FileInputStream(new File(cf));
    		byte[] cf_ba=null;
    		ByteArrayOutputStream cf_baos=new ByteArrayOutputStream();
    		int br=0;
    		byte[] tmp=new byte[512];
    		while((br=cfin.read(tmp))!=-1)
    		{
    			cf_baos.write(tmp, 0, br);
    		}
    		cf_baos.close();
    		cf_ba=cf_baos.toByteArray();
    		byte[] ucf_ba=dcc.doFinal(cf_ba);
    		OutputStream ucfout=new FileOutputStream(new File(ucf));
    		ucfout.write(ucf_ba);
    		return;
    	}
    }


    aufruf der fileaesc in einer anwenung :

    fileaesc fac=new flieaesc("DATEi-NAME", "KEy");

    und dann entweder
    fac.cryptfile();
    oder halt
    fac.decryptfile();

    der code könnte ein wenug buggy sein da er sehr alt ist und nicht mehr auf dem neusten cryptologischem stand von java
    sollte aber mit ner vorgesetzten MAiN welche den datei-namen und den schlüssel sowie einen switch ob ver- oder entschlüsselt werden soll von der command-line liest *als parameter*

    dieses verfahren nutz die block-chiffre CBC in verbindung mit PKCS#5 padding ... sollte also zu keinem datenverlust führen wie beim sehr alten Single-DES w/ NoPADD ...

    greedz

    de SPiKEe *x*D

    Beitrag zuletzt geändert: 28.3.2009 12:33:25 von df-t
  8. Hallo,

    Wo ist euer Problem beim umwandeln?
    int i = 0;
    String str = "blablabla";
    String aus = "";
    while(i < str.length())
    {
           aus += (char)((int)str.getCharAt(i)-65);
           i++;
    }


    So einfach kann man das mit ASCII, ANSI und co machen.

    Gruß Tillorgias
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!