Java Text verschlüsseln

Xerxes18

Lieutenant
Registriert
Aug. 2008
Beiträge
700
Guten Abend liebe Gemeinde,

ich bin gerade dabei Strings aus einer TextArea zu verschlüsseln.

Bis jetzt klappt es auch, wie ich es haben will, nur die Methode ist naja etwas "mittelalterlich" :D

Ich ersetze dabei in einer Methode mit If-Anweisungen jeden Buchstaben des Alphabets durch andere. Die Frage ist nur, ob das Sinn macht über 20 If-Anweisungen für jeden Buchstaben zu nutzen, denn die gibt es ja auch in Klein! :freak:

Ich bitte euch deswegen um Rat, ob ich das so wirklich umsetzen soll, oder etwas anderes überlegen sollte :)

MFG
Xerxes
 
Xerxes18 schrieb:
Ich bitte euch deswegen um Rat, ob ich das so wirklich umsetzen soll, oder etwas anderes überlegen sollte :)

Überleg dir etwas anderes. Ich bin nicht wirklich bewandert was Java angeht, aber mit PHP oder JavaScript würde man das definitiv anders machen.
 
du kannst dafür switch case nutzen

switch(variable)
{
case 'a': Anweisung break;
case 'b': Anweisung break;
....

}
 
ist nicht java.security das richtige package? da gibt es md5 zumindest drin, ist zwar nicht zum verschlüsseln gedacht, aber naja.

wenn es aus irgendeinem grund die von TE obengenannte variante sein soll, ist mit ner switch anweisung das ganze recht einfach zu bewerkstelligen. sollen zudem die buchstaben durch eine feste verschiebung kodiert werden, sollte es mit modulo noch einfacher gehen, da die zeichen ja fortlaufend kodiert werden...
 
Wofür willst du die Verschlüsselung nutzen?

mfg
 
Hallo,

danke für die vielen Antworten,
das ist eine Übungsaufgabe die ich bewerkstelligen muss. Ich glaube aber dabei geht es darum, dass man nicht die schon vorhandenen Verschlüsselungstechniken anwendet, sondern eigene Ideen umsetzt.
 
möchtest du jetzt z.b
a->m
b->n
c->o
... verschieben oder ohne muster?
 
java.crypto wäre hier das richtige Package. Bei security geht es um Zertifikate und so Kram. crypto beschäftigt sich hauptsächlich mit Ver- und Entschlüsselung.


Ein If bzw. switch für jedes Zeichen zu verwenden, ist natürlich Blödsinn. Hier eignen sich Schleifen und Modulorechnungen.
Jedes String-Objekt hat die Methode .length(), womit man schon mal die Länge eines String herausbekommt.
Mit .charAt(int i) bekommst du den Char an dieser Stelle im String (Achtung, Zählung beginnt bei 0 und nicht bei 1!).
Mit dem Char kann man jetzt ganz normal rechnen, da er gleichzeitig ein Zeichen als auch dessen Zahl im Unicode repäsentiert. Und Unicode fängt am Anfang mit der ASCII-Tabelle an. Hast du ein 'A', wäre der dezimale Wert des Char eine 65 (so wie es in der ASCII-Tabelle steht).
Nun rechnest du am besten die 65 ab, damit dein Alphabet von 0 'A' bis 25 'Z' geht. Da addierst du dann 13 für die einfache Cäsar-Verschlüsselung drauf.
Für den Fall, dass die nun entstehende Zahl über 25 'Z' kommt, rechnest du modulo 26, in Java wäre das % 26.
Anschließend addierst du noch 65, damit die Zahl wieder einen Buchstaben nach ASCII-Tabelle ergibt.

Voila, so kannst du den String Buchstaben für Buchstaben verschlüsseln.
 
könntest über den ASCII code gehen und damit ne Caesar Verschlüsselung programmieren

edit: seh grad der vorschlag kam schon ^^
 
Den ROT13 Code hab ich hier sogar noch rumfliegen, bei Interesse einfach ne PN an mich;)
 
Ich würde das ganze in ein char array wandeln.
Da kannst ganz einfach mit ner schleife durchinterrieren und auf jedes Zeichen das gleiche System anwenden.
Dir muss aber klar sein das solche Verschlüsselungen sehr einfach zu knacken sind ab einer gewissen textlänge.
Kann da jedem Dau in paar min beibringen wie er sowas knackt.
 
Nur zur Ergänzung...

Verschiebung von Buchstaben und ähnliche Dinge fallen nicht unter den Begriff Verschlüsselung(Kryptographie) sondern unter den Begriff Verschleiherung (Steganographie).
 
Ich möchte ja auch kein Programm für ein Geheimdienst schreiben :D

Ich glaube in der Aufgabe soll das "Muster" der Verschlüsselung sogar erkennbar sein.

@e-Laurin:
Ich glaube hierbei wird es schwer sein in einem TextArea auf nur einen String zuzugreifen, denn die getText() bezieht sich ja dabei auf den ganzen Text der eingegben wurde.

@Xidus:

Mit Switch Case hatte ich Probleme, denn diese akzeptiert ja keine Strings.

PS: Habe ganz vergessen zu erwähnen, dass ich noch Anfänger bin :)
 
Zuletzt bearbeitet:
Dann vielleicht eine kleine Hilfestellung.

Code:
String verschluesselMich ="text";
Char[] blank= verschluesselMich.toCharArray();
Char[] verschluesselt =verschluesselMich.toCharArray();
int zahl = 3; //offset
for(int i =0;i<blank.length;i++){
verschluesselt[i] = blank[i]+zahl;
}
System.out.println("unverschluesselt: "+verschluesselMich);
System.out.println("verschluesselt: "+verschluesselt);

Dieser Code macht aus einem a ein c aus einem b ein d etc.
Wenn man will das ein z nicht zu irgend einem Zeichen wird sollte man das extra behandeln.
(code nicht getestet)
 
Ja stimmt, das ist sehr gutes beispiel, danke dir. Aber irgendwie möchte ich doch etwas anderes machen, weil warscheinlich fast mehr als die hälfte diese Methode anwenden wird und deine Methode hat mich auf eine sehr gute Idee gebracht :)
 
Xerxes18 schrieb:
Ja stimmt, das ist sehr gutes beispiel, danke dir. Aber irgendwie möchte ich doch etwas anderes machen, weil warscheinlich fast mehr als die hälfte diese Methode anwenden wird und deine Methode hat mich auf eine sehr gute Idee gebracht :)

Du kannst diese Methode auch erweitern. Dafür lass den Benutzer ein Passwort für die Verschlüsselung wählen. Bei der Verschlüsselung verschiebst du dann aber nicht jeden Buchstaben um 2 Stellen in der ASCII Tabelle, sondern um die verschiedenen Char-Werte der Buchstaben des Passworts.

Habe genau dafür mal ne Klasse in vb.net geschrieben:
GetKey liefert die Charwerte des Passworts je nach gewählter Position.
DeEncrypt ent- und verschlüsselt.

Code:
Public Class DecryptEncrypt

  Private Function GetKey(ByVal nPosition As Integer, ByVal sKey As String) As Integer
    Try
      If IsNumeric(sKey) Then Return CInt(sKey)
      Dim nKeyLength As Integer = sKey.Length
      nPosition = nPosition Mod nKeyLength
      Return Asc(sKey.ToCharArray()(nPosition))
    Catch ex As Exception
      Return 0
    End Try
  End Function

  Public Function DeEncrypt(ByVal Encrypt As Boolean, ByVal sText As String, ByVal sKey As String) As String
    Try
      Dim sDecryptedText As String = String.Empty
      Dim nNewChar As Integer = 0, nPosCount As Integer = 0
      For Each letter As Char In sText
        If Encrypt Then
          nNewChar = Asc(letter) + GetKey(nPosCount, sKey)
        Else
          nNewChar = Asc(letter) - GetKey(nPosCount, sKey)
        End If
        nNewChar = nNewChar Mod 256
        If nNewChar < 0 Then nNewChar += 256
        sDecryptedText &= Chr(nNewChar)
        nPosCount += 1
      Next
      Return sDecryptedText
    Catch ex As Exception
      Return "Error"
    End Try
  End Function

End Class
 
Zurück
Oben