Datentypen String in class sicher verwahren

IAmAWard

Mitglied
Hey,
Und zwar habe ich bei meinem Programm eine Cryptmethode um meine Fortschritte bei meinem Spiel vorm speichern mittels eines Keys zu verschlüsseln. Mein Problem ist, dass ich nicht weiß, wie ich ich dieses Key so sicher speichern kann, dass man nicht einfach nur ein txt dokument oder (wie es bei mir geht) einfach die class datei öffnet und dann da igwo String key = „absbxhiodndicuxb“; sondern dass entweder da verschlüsselt ist oder man es igwie verschlüsselt abspeichert so, dass es nicht von jedem rdm ausgelesen werden kann!
 
meine Fortschritte bei meinem Spiel vorm speichern mittels eines Keys zu verschlüsseln
Was willst Du speichern? Wer soll das nicht sehen können und warum?

Mein Problem ist, dass ich nicht weiß, wie ich ich dieses Key so sicher speichern kann
Warum speicherst Du den Key überhaupt?

so, dass es nicht von jedem rdm ausgelesen werden kann!
Wenn es nur darum geht, kannst Du z. B. einfach eine zufällige Bytefolge als Key verwenden. Die kannst Du ggf. noch XORen und als Hexstring oder Base64-kodiert ablegen. Andere/zusätzliche Möglichkeit: den Key auf verschiedene Klassen verteilen, dann liegt er in unterschiedlichen .class-Files.
 
@mihe7 Ich will die Fortschritte des Spiels abspeichern und um nicht Schummeln zu können wird das verschlüsselt. Der Key muss ja abgespeichert sein damit ich nach dem auslesen der Datei diese wieder entschlüssel. Wenn ich den Key auf mehrere class verteilt ist sie ja im Prinzip immer noch leicht zu knacken außerdem geht das beim MVC model nur medingt .

Was meinst du mit dem zufälligen Schlüssel ich muss es ja wiedee igwie entschlüsseln und dann bräucht ich den Key auch wieder.

Gibt es nicht eine möglichkeit dass Java einfach in der Class teile verschlüsselt mit nem Standart Key aber nicht so dass das dann auch jeder wieder entschlüsseln kann?
 
Was meinst du mit dem zufälligen Schlüssel ich muss es ja wiedee igwie entschlüsseln und dann bräucht ich den Key auch wieder.

Ich meinte, dass Du nicht eine Zeichenfolge "DiesIstDasSicherePasswort" nimmst, sondern eine zufällige Bytefolge.

Code:
byte[] b = new byte[]{
    (byte)0xef, (byte)0x2e, (byte)0x0c, (byte)0x28, (byte)0x4e,
    (byte)0xf7, (byte)0x0e, (byte)0x23, (byte)0xef, (byte)0x29
};

Natürlich verwendest Du diese Bytefolge zum ver- und entschlüsseln.

Diese Bytefolge kannst Du ganz unterschiedlich in Deiner/n Klasse/n ablegen.

Du kannst die Folge wie gezeigt verwenden, Du kannst sie in anderer Reihenfolge ablegen, Du kannst vorher z. B. noch ein XOR drüber laufen lassen. Du kannst die Folge auch hex- oder base64-kodiert als String ablegen (hex: "ef2e0c284e7f0e23ef29", base64: "ZWYyZTBjMjg0ZTdmMGUyM2VmMjk=").

Außerdem kannst Du auch hergehen und
Code:
class EineKlasse {
public static byte[] b = new byte[]{
    (byte)0xef, (byte)0x2e, (byte)0x0c, (byte)0x28, (byte)0x4e
};

class AndereKlasse {
public static byte[] b = new byte[]{
    (byte)0xf7, (byte)0x0e, (byte)0x23, (byte)0xef, (byte)0x29 
};
schreiben und den vollständigen Schlüssel in einer weiteren Klasse aus diesen beiden Teilen zusammensetzen. Dabei kannst Du auch wieder die Reihenfolge innerhalb der Arrays vertauschen usw.
 
Erzeuge einen zufälligen Schlüssel und schreibe diesen verteil in die verschlüsselte Datei. Also im einfachsten Fall die erste hälfte am Anfang und die zweite am Ende. Damit liegt der Schlüssel nicht im Code. Natürlich ist auch das knackbar aber dafür muss man sich zumindest schinmal den Code selber ansehen und verstehen.
 
Das Verfahren um es wieder zurückzuvertauschen ist/wäre ja mit dem Bytecode dabei.
Natürlich ist das dabei. Es spielt gar keine Rolle, welches Verfahren man anwendet: sobald der Schlüssel mit ausgeliefert wird, ist alles nur noch Obfuscation. Mir persönlich würde eine x-beliebige byte-Folge im Code reichen - die erkennt man auch nicht sofort.
 
Man könnte sich auch fertige Obfuscator wie ProGuard o.ä. mal anschauen. Ansonsten finde ich die Idee mit dem Hash nicht schlecht um Dateimanipulationen zu erkennen.
Wenn es wirklich wichtig ist und sowieso eine Verbindung zu einem Server aufgebaut werden muss, damit das Programm funktioniert, könnte dieser auch das Passwort liefern.
 
Oder so eine Konstante denn auch nicht so leicht zu erkennen:
Java:
char[][] a = new char[][]{
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("122", 8)},
        {(char) Integer.parseUnsignedInt("151", 8), (char) Integer.parseUnsignedInt("2", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("103", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("76", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("77", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("105", 8)},
        {(char) Integer.parseUnsignedInt("145", 8), (char) Integer.parseUnsignedInt("3", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("33", 8)},
        {(char) Integer.parseUnsignedInt("163", 8), (char) Integer.parseUnsignedInt("24", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("64", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("52", 8)},
        {(char) Integer.parseUnsignedInt("145", 8), (char) Integer.parseUnsignedInt("22", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("125", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("134", 8)},
        {(char) Integer.parseUnsignedInt("145", 8), (char) Integer.parseUnsignedInt("5", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("136", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("43", 8)},
        {(char) Integer.parseUnsignedInt("170", 8), (char) Integer.parseUnsignedInt("12", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("113", 8)},
        {(char) Integer.parseUnsignedInt("40", 8), (char) Integer.parseUnsignedInt("14", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("123", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("55", 8)},
        {(char) Integer.parseUnsignedInt("164", 8), (char) Integer.parseUnsignedInt("25", 8)},
        {(char) Integer.parseUnsignedInt("162", 8), (char) Integer.parseUnsignedInt("23", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("111", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("54", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("116", 8)},
        {(char) Integer.parseUnsignedInt("166", 8), (char) Integer.parseUnsignedInt("21", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("40", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("61", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("135", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("74", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("140", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("142", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("70", 8)},
        {(char) Integer.parseUnsignedInt("163", 8), (char) Integer.parseUnsignedInt("16", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("60", 8)},
        {(char) Integer.parseUnsignedInt("145", 8), (char) Integer.parseUnsignedInt("11", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("34", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("126", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("46", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("67", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("112", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("41", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("72", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("107", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("104", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("75", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("132", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("73", 8)},
        {(char) Integer.parseUnsignedInt("164", 8), (char) Integer.parseUnsignedInt("31", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("131", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("45", 8)},
        {(char) Integer.parseUnsignedInt("143", 8), (char) Integer.parseUnsignedInt("27", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("53", 8)},
        {(char) Integer.parseUnsignedInt("40", 8), (char) Integer.parseUnsignedInt("20", 8)},
        {(char) Integer.parseUnsignedInt("151", 8), (char) Integer.parseUnsignedInt("15", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("117", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("115", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("121", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("130", 8)},
        {(char) Integer.parseUnsignedInt("163", 8), (char) Integer.parseUnsignedInt("4", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("71", 8)},
        {(char) Integer.parseUnsignedInt("162", 8), (char) Integer.parseUnsignedInt("6", 8)},
        {(char) Integer.parseUnsignedInt("40", 8), (char) Integer.parseUnsignedInt("32", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("143", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("106", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("47", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("65", 8)},
        {(char) Integer.parseUnsignedInt("144", 8), (char) Integer.parseUnsignedInt("1", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("100", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("44", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("101", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("50", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("124", 8)},
        {(char) Integer.parseUnsignedInt("40", 8), (char) Integer.parseUnsignedInt("0", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("37", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("141", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("35", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("66", 8)},
        {(char) Integer.parseUnsignedInt("153", 8), (char) Integer.parseUnsignedInt("30", 8)},
        {(char) Integer.parseUnsignedInt("40", 8), (char) Integer.parseUnsignedInt("7", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("63", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("114", 8)},
        {(char) Integer.parseUnsignedInt("164", 8), (char) Integer.parseUnsignedInt("17", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("133", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("56", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("102", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("42", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("57", 8)},
        {(char) Integer.parseUnsignedInt("124", 8), (char) Integer.parseUnsignedInt("10", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("36", 8)},
        {(char) Integer.parseUnsignedInt("145", 8), (char) Integer.parseUnsignedInt("26", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("120", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("51", 8)},
        {(char) Integer.parseUnsignedInt("164", 8), (char) Integer.parseUnsignedInt("13", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("62", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("110", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("127", 8)},
        {(char) Integer.parseUnsignedInt("141", 8), (char) Integer.parseUnsignedInt("137", 8)},};

Im Bytecode steht nur Kauderwelsch.
 

Neue Themen


Zurück
Oben