byte-weise Verschlüsselung

B

blubbrezn

Gast
Ich wollte ein kleines Programm programmieren, mit dem man einen String in ein Byte array umwandeln
und dann zu jedem einzelnen Byte einen Int (Schlüssel) addiert. Dann soll das Array wieder in einen String umgewandelt werden.
Java:
class Test2 {
    private String s;
    
    public Test2() {
        s = "Hallo wie geht es dir"; 
    }
    public void lockString(int key){
        byte[] buffer;
        buffer = s.getBytes();
        
        for(int i=0;i<s.length();i++){
            buffer[i]+=key;
            while(buffer[i]>255){
                buffer[i]-=256;
            }
        }
        s = new String(buffer);
        System.out.println(s);

    }
    public void unlockString(int key){
        byte[] buffer;
        buffer = s.getBytes();
        for(int i=0;i<s.length();i++){
            buffer[i]-=key;
            while(buffer[i]<0){
                buffer[i]+=256;
            }
        }
        s = new String(buffer);
        System.out.println(s);

    }
}
Das Problem ist, dass wen ich als key 4134 (einziges Beispiel was ich durch Zufall gefunden hab) nehme, funktioniert die entschlüsselung nicht richtig.

Wäre sehr nett wenn mir jmd helfen könnte, weil ich weis einfach nicht warum das so ist.
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
Java ist eben gemein, bei
Java:
public class Test
{

    public static void main(String[] args)
    {
        byte[] b =  {-40, 40, 126};
        b = new String(b).getBytes();
        System.out.println(Arrays.toString(b));
    }
}
kommt nicht dasselbe Array wieder raus, sondern als Ausgabe
Code:
[-17, -65, -67, 40, 126]
auf bytes <-> String kann man sich nicht wirklich verlassen, evtl. gehts wenn du allein die negativen Bytes wegläßt,
sorge für positive Bereiche, wie auch immer, hast du vielleicht auch schon vor, klappt nur noch nicht


-----

Java:
            while(buffer[i]<0){
                buffer[i]+=256;
            }
ist übrigens eine Endlosschleife, jedes byte +256 und wieder auf byte gecastet ist dasselbe,

die erste Schleife [c]while(buffer>255){[/c] ebenso, die kann aber zumindest nie starten,
da byte nur den Bereich -127 bis +128 hat

gehe auf short oder int und dann mit deinen Schleifen Bereich 0-255 halten
 
B

blubbrezn

Gast
Würde es besser funktionieren wenn ich das ganze mit Character statt mit Bytes machen würde?

Aber da weis ich nicht wie ich da einen Int addieren soll?
 
S

SlaterB

Gast
char ist wie short, int oder byte auch nur ein Zahlenbereich, da kannst du + und - rechnen,

char ist wie short und int größer als byte, insofern kann das schon helfen gegen Negative,
und char[] <-> String ist in der Tat vertrauenswürdiger als byte[] <-> String, besonders wenn wieder ohne Negative

insgesamt eine exellente Idee, ja ;)
 
B

blubbrezn

Gast
SUPER! danke so funktioniert es
bis zu 10 Stellen aber das liegt dann daran das in den int nicht mehr reinpasst oder?
Java:
import java.util.*;

class Test {
    private static String s;


    public Test() {

        s = "Hallo wie geht es dir";


    }
    public static void lockString(int key){
        char[] buffer;
        buffer = new  char[s.length()];
        s.getChars(0,s.length(),buffer,0);
        for(int i=0;i<s.length();i++){
            buffer[i]+=key;

        }
        s = new String(buffer);
        System.out.println(s);

    }
    public static void unlockString(int key){
        char[] buffer;
        buffer = new  char[s.length()];
        s.getChars(0,s.length(),buffer,0);
        for(int i=0;i<s.length();i++){
            buffer[i]-=key;

        }
        s = new String(buffer);
        System.out.println(s);

    }
    public static void main(String[] args) {
        new Test();
        System.out.println("Schlüssel eingeben");
        Scanner input = new Scanner(System.in);
        int key = input.nextInt();
        System.out.println(key);
        lockString(key);
        unlockString(key);
        main(args);
    }

}
 
T

TheRealSpikee

Gast
Ich werf jetzt einfach mal AES mit in den Raum ...

Java:
import java.io.*;
import javax.crypto.*;
import java.security.*;
public class AESHelper
{
	private BufferedReader in=null;
	private PrintStream out=null;
	private Cipher encryptCipher=null;
	private Cipher decryptCipher=null;
	private SecretKey secretKey=null;
	public AESHelper(BufferedReader in, PrintStream out, SecretKey secretKey) { this.in=in; this.out=out; this.secretKey=secretKey; }
	public void initCipher() throws Exception
	{
		(encryptCipher=Cipher.getInstance("AES")).init(Cipher.ENCRYPT_MODE, secretKey);
		(decryptCipher=Cipher.getInstance("AES")).init(Cipher.DECRYPT_MODE, secretKey);
	}
	public static SecretKey generateKey() throws Exception
	{
		KeyGenerator keyGenerator=KeyGenerator.getInstance("AES");
		keyGenerator.init(new SecureRandom());
		return keyGenerator.generateKey();
	}
	public void sendMessage(String msg) throws Exception
	{
		out.println(ToolKit.byteArrayToHexString(crypt(msg.getBytes(), encryptCipher)));
	}
	public String receiveMessage() throws Exception
	{
		String line="";
		while((line=in.readLine())!=null)
		{
			if(!line.equals(""))
				break;
		}
		return new String(crypt(ToolKit.hexStringToByteArray(line), decryptCipher));
	}
	private byte[] crypt(byte[] dataInput, Cipher cipher) throws Exception
	{
		ByteArrayInputStream bais=new ByteArrayInputStream(dataInput);
		ByteArrayOutputStream baos=new ByteArrayOutputStream();
		int blockSize=cipher.getBlockSize();
		int outputSize=cipher.getOutputSize(blockSize);
		byte[] input=new byte[blockSize];
		byte[] output=new byte[outputSize];
		int readBytes=0;
		boolean finish=false;
		while(!finish)
		{
			readBytes=bais.read(input);
			if(readBytes==blockSize)
			{
				int outputLength=cipher.update(input, 0, blockSize, output);
				baos.write(output, 0, outputLength);
			}
			else
				finish=true;
		}
		if(readBytes>0)
			output=cipher.doFinal(input, 0, readBytes);
		else
			output=cipher.doFinal();
		baos.write(output);
		return (baos.toByteArray());
	}
}

class ToolKit
{
	public static String byteArrayToHexString(byte[] input)
	{
		StringBuffer sb=new StringBuffer(input.length*2);
		for(int i=0; i<input.length; i++)
		{
			int v=input[i]&0xFF;
			if(v<16)
				sb.append("0");
			sb.append(Integer.toHexString(v));
		}
		return sb.toString();
	}
	public static byte[] hexStringToByteArray(String input)
	{
		byte[] ret=new byte[input.length()/2];
		for(int i=0; i<ret.length; i++)
		{
			int index=i*2;
			int v=Integer.parseInt(input.substring(index, index+2), 16);
			ret[i]=(byte)v;
		}
		return ret;
	}
}

Da AES in der Regel eine Block-Länge von 128Bit / 16Byte hat hat der Output eine Länge von 16Byte bei einem Input von 1Byte-15Byte , 32Byte bei Input 16Byte-31Byte usw ...
Heißt also : der Output hat immer eine bestimmte Länge bei einer bestimmten Länge des Inputs. Sollte in ungefähr das sein was du suchst.


*Ist zwar wie mit Kanonen auf Spatzen schießen ... aber funktioniert*
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2
I Dateigröße von einem InputStream oder byte[] bekommen Java Basics - Anfänger-Themen 2
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
G ImageIcon in Byte-Array ablegen Java Basics - Anfänger-Themen 7
D Best Practice Parameter int vs byte Java Basics - Anfänger-Themen 16
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
S Byte-Array kann chars speichern? Java Basics - Anfänger-Themen 3
N Datentypen Image zu Byte-Array Java Basics - Anfänger-Themen 4
M Datentypen Byte, Float und Boolean Java Basics - Anfänger-Themen 13
F byte, short oder doch int? Java Basics - Anfänger-Themen 6
S Performance von byte[], short[], int[]..? Java Basics - Anfänger-Themen 24
D Methoden int to byte array und zurück? Java Basics - Anfänger-Themen 5
P int zu byte Java Basics - Anfänger-Themen 8
F Byte Array wachsen lassen Java Basics - Anfänger-Themen 5
M Java Klasse Byte Java Basics - Anfänger-Themen 10
F Byte Ausgabe plötzlich falsch Java Basics - Anfänger-Themen 0
V String in Byte umwandeln Java Basics - Anfänger-Themen 11
O Input/Output Ein (negatives) Byte über PrintWriter hinausschreiben Java Basics - Anfänger-Themen 3
T byte[] zu String mit Sonderzeichen Java Basics - Anfänger-Themen 2
W Nullpointer bei Objekt Serialisierung mit ArrayList<byte[]> etc. Java Basics - Anfänger-Themen 2
J byte - Ausgabe Java Basics - Anfänger-Themen 2
F Teil eines Byte Array an eine Methode übergeben Java Basics - Anfänger-Themen 5
S byte to float Java Basics - Anfänger-Themen 4
J Byte Folge erkennen Java Basics - Anfänger-Themen 5
M sehr großes Byte Array Java Basics - Anfänger-Themen 3
M Byte Array und Co. Java Basics - Anfänger-Themen 12
T Operatoren Float in byte umwandeln Java Basics - Anfänger-Themen 3
Y File to byte[] and byte[] to sysout Java Basics - Anfänger-Themen 3
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
F Hexfolge in Byte Array ersetzen Java Basics - Anfänger-Themen 8
P String in byte konvertieren, wie? Java Basics - Anfänger-Themen 4
T Erste Schritte Byte Java Basics - Anfänger-Themen 3
R byte[] zu String und Ausgabe Java Basics - Anfänger-Themen 2
H Variablen short <-> byte[] Java Basics - Anfänger-Themen 15
X Datentypen String in byte[] Java Basics - Anfänger-Themen 29
H Variablen 32bit Zählwert als Byte-Array Java Basics - Anfänger-Themen 9
H Variablen string nach byte Java Basics - Anfänger-Themen 12
B Frage zur Effizienz von read und read(byte[]) Java Basics - Anfänger-Themen 23
R Erste Schritte Rechnenoperationen mit byte, short und char Java Basics - Anfänger-Themen 8
V Datentypen Frage zum Datentyp Byte Java Basics - Anfänger-Themen 11
L Byte[] to String, doch bits sind gespiegelt (MSB/LSB) Java Basics - Anfänger-Themen 3
S Von byte[] nach String zurueck nach byte[]. Arrays sind nicht identisch :( Java Basics - Anfänger-Themen 6
S ArrayList<Byte> in String umwandeln Java Basics - Anfänger-Themen 5
V unsigned byte? Java Basics - Anfänger-Themen 27
M byte Array Mindestlänge Java Basics - Anfänger-Themen 19
U short[] nach byte[] Java Basics - Anfänger-Themen 11
D [jni] jbytearray <-> byte array Java Basics - Anfänger-Themen 8
S Datentypen Ändern eines byte[] Arrays Java Basics - Anfänger-Themen 4
P byte Array aus ImageIcon Java Basics - Anfänger-Themen 10
S Input/Output String in byte umwandeln? Java Basics - Anfänger-Themen 5
F von Byte zu 2 Stellig Hex Java Basics - Anfänger-Themen 3
G byte[] (Base64) korrekt übergeben Java Basics - Anfänger-Themen 4
V Jar-Datei von Byte-Array oder Stream laden? Java Basics - Anfänger-Themen 9
O 64bit- OS byte, short, int oder long bzw. float oder double? Java Basics - Anfänger-Themen 13
G Binär in Byte speichern Java Basics - Anfänger-Themen 7
T Datentypen byte -Division..mal gehts mit cast mal ohne Java Basics - Anfänger-Themen 5
T Datentypen default ist int, cast zu byte nötig... Java Basics - Anfänger-Themen 2
F Byte nach Zahl umwandeln Java Basics - Anfänger-Themen 11
E Datentypen type cast problem (int, byte,) Java Basics - Anfänger-Themen 5
T Datentypen unsigned byte? Java Basics - Anfänger-Themen 9
G Integar zu Byte Java Basics - Anfänger-Themen 4
P Byte mit 0...255? Java Basics - Anfänger-Themen 5
N Datentypen Fehler beim Umwandeln in byte Java Basics - Anfänger-Themen 3
L Umwandlung int <--> byte Java Basics - Anfänger-Themen 2
L Datentypen 250 und byte? Java Basics - Anfänger-Themen 4
L Datentypen byte[] in String und wieder zurück Java Basics - Anfänger-Themen 3
H Datentypen Byte-Array RSA Java Basics - Anfänger-Themen 9
H Datentypen Rechnen mit signed Byte-Array - unsinged byte Java Basics - Anfänger-Themen 3
N Files mit Byte an Socket versenden Java Basics - Anfänger-Themen 2
V Byte -> String -> Byte verlustfrei Java Basics - Anfänger-Themen 12
Hindi93 Byte to Int Java Basics - Anfänger-Themen 4
H Datentypen byte[] to int Java Basics - Anfänger-Themen 9
S hex zu byte Java Basics - Anfänger-Themen 4
M Byte Array: Werte größer 127? Java Basics - Anfänger-Themen 11
S Addition zweier 32 Byte langer ByteArrays Java Basics - Anfänger-Themen 5
H 1 Byte Status Variable Java Basics - Anfänger-Themen 3
P Datentypen Byte und char Typecast Java Basics - Anfänger-Themen 2
M Bit/Byte Operationen Java Java Basics - Anfänger-Themen 8
W Datentypen int -> byte Java Basics - Anfänger-Themen 2
H Datentypen Byte-Array aus Stream lesen Java Basics - Anfänger-Themen 3
F Typenumwandlung byte <=> int verstehen Java Basics - Anfänger-Themen 3
S Byte eines arrays Java Basics - Anfänger-Themen 17
N Frage zu Datentyp byte Java Basics - Anfänger-Themen 14
B unsigned byte Problem Java Basics - Anfänger-Themen 9
S 2 Byte Arrays addieren Java Basics - Anfänger-Themen 45
S Unbekannte Daten einlesen, speichern und in einem byte Array speichern Java Basics - Anfänger-Themen 3
S Alle Datentypen in byte Array und zurückwandeln Java Basics - Anfänger-Themen 2
H Frage zu Byte-Streams Java Basics - Anfänger-Themen 2
Z Wie Byte[] in einen String oder int konvertieren Java Basics - Anfänger-Themen 2
0 byte[] -> hex Java Basics - Anfänger-Themen 2
G char[] in byte[] konvertieren? Java Basics - Anfänger-Themen 2
V Byte Arrays in Strings umwandeln und splitten Java Basics - Anfänger-Themen 2
M unsigned byte Java Basics - Anfänger-Themen 4
F Byte 0 und 1 einzelnd zuweisen? Java Basics - Anfänger-Themen 17
G byte [] aus uRL erhalten Java Basics - Anfänger-Themen 11
J Byte-Array als Hex-Datei speichern? Java Basics - Anfänger-Themen 9
G Hex to Byte Java Basics - Anfänger-Themen 13
S Byte in Zahl umwandeln Java Basics - Anfänger-Themen 3
M Double-Wert in Byte[] umwandeln Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben