Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

[java] verschlüsselungsmethoden

EDROD / 9 Antworten / Baumansicht Nickles

moin :)


da ich in java noch nicht mit verschluesslungsalgorithmen gearbeitet habe, bin ich mir nicht sicher ob folgender code das macht was er soll: einen string verschlüsseln und das ergebnis zurückgeben


public

class Start
{
  public static void
main(String[] args)
  {
    String message =
"huhu"
;
    System.out.println(message +
" = "
+ verschluessle(message));
  }

  public static String verschluessle(String s)
  {
    byte
[] bytearr = s.getBytes();
    MessageDigest md;
    String verschluesselt =
new
String();
    try
    {
      md = MessageDigest.getInstance(
"md5"
);
      md.digest(bytearr);
      verschluesselt = bytearr.toString();
    }
    catch
(NoSuchAlgorithmException nsa)
    {
      System.out.println(nsa.getMessage());
     }
    return
verschluesselt;
  }
}

da die laenge des ergebnisses mich stutzig gemacht hat, hab ich mal in php mit md5() probiert, ob ich da das selbe rausbekomm... war ned der fall

nun weiss ich nicht ob es an den möglicherweise verschiedenen verschlüsselungsalgorithmen "md5" in java und md5() in php liegt oder an meinem code >.<


bedanke mich schonmal im voraus 8)

bei Antwort benachrichtigen
EDROD Nachtrag zu: „[java] verschlüsselungsmethoden“
Optionen

sorry, hab des

import java.security.*;

vergessen mitzukopiern -.^

bei Antwort benachrichtigen
ralfglauberman EDROD „[java] verschlüsselungsmethoden“
Optionen

Hi,
kann kein Java, kann dir daher nichts zu deinem Code sagen, nur soviel: MD5 ist ein Standard, d.h. wenn du eine MD5 von einem String erzeugst muss diese immer 32 Zeichen lang sein und auch unabhängig vom verwendeten Prog immer identisch sein.

bei Antwort benachrichtigen
EDROD Nachtrag zu: „[java] verschlüsselungsmethoden“
Optionen

stimmt.
das problem war die umwandlung des byte-arrays zurück in einen string. die toString methode wandelt das byte nicht in hex code.
um das byte-array dennoch in einen string umzuwandeln lässt man in einer schleife alle elemente des arrays durchlaufen; innerhalb der schleife extrahiert man das obere und untere halbbit des elements. per Integer.toString(halbbit, 16) erhält man den hex-string des jeweiligen halbbits, den man an einen StringBuffer anhängt (erst oberes, dann unteres halbbit).

bei Antwort benachrichtigen
toenzli EDROD „stimmt. das problem war die umwandlung des byte-arrays zurück in einen string....“
Optionen

Hallo

Mal eine Frage: Wie extrahiere ich von einem Element in einem Byte Array das obere und untere halbbit?

Da wär noch eine Frage: Wie entschlüssele ich einen verschlüsselten String wieder?

Danke und Gruss

bei Antwort benachrichtigen
EDROD Nachtrag zu: „[java] verschlüsselungsmethoden“
Optionen
Wie extrahiere ich von einem Element in einem Byte Array das obere und untere halbbit?
es heisst halbbyte, sry mein fehler...
ich kopier einfach den code von meiner funktion hier rein, wenn du dich nicht für einsen und nullen interessierst kannst du damit strings verschluesseln ohne dich erst damit auseinandersetzen zu müssen, wenn du interesse dran hast, http://www.elektronik-kompendium.de/sites/dig/#1 ^^

public static String verschluessle(String s)
{
    byte[] bytearr = s.getBytes();
    MessageDigest md;
    String verschluesselt = new String();
    try
    {
        bytearr = MessageDigest.getInstance("md5").digest(bytearr);
        StringBuffer sb = new StringBuffer(bytearr.length * 2);
        int i, oberes, unteres; // halbbytes
        for (i=0; i         {
        oberes = (int) ((bytearr[i] & 0xf0) >>> 4);
        unteres = (int) (bytearr[i] & 0x0f);
        sb.append( Integer.toString(oberes, 16) + Integer.toString(unteres, 16) );
        }
        verschluesselt = sb.toString();
    }
    catch(NoSuchAlgorithmException nsa)
    {
        System.out.println(nsa.getMessage());
    }
    return verschluesselt;
}


Wie entschlüssele ich einen verschlüsselten String wieder?
es gibt natürlich mittel und wege dazu, aber der algorithmus ist so konzipiert, dass er nur in eine richtung verschlüsseln kann; nicht wieder zurück
bei Antwort benachrichtigen
toenzli EDROD „[java] verschlüsselungsmethoden“
Optionen

Mal eine Frage:

Wo liegt dann der Sinn der Verschlüsslung? Ich verschlüssle den String, damit ich ihn z.B. in einem INI File ablegen kann aber nicht im Klartext. Aber beim einlesen des INI Files möchte ich den String wieder entschlüsseln, damit ich z.B. das Passwort für den Datenbankzugang habe.

Danke und Gruss

bei Antwort benachrichtigen
EDROD toenzli „Mal eine Frage: Wo liegt dann der Sinn der Verschlüsslung? Ich verschlüssle...“
Optionen

wenn du ein passwort einfach so ohne probleme entschluesseln könntest, könnte auch jedes kind das verschlüsselte passwort aus der ini datei wieder entschlüsseln. ist dann genau so wenig sicherheit wie ein im klartext abgespeichertes pw.

bsp. für sinnvollen einsatz:
du speicherst in einer datenbank das passwort verschlüsselt ab. somit kann niemand, selbst du nicht, das passwort rekonstruieren.
wenn du jedoch eine pw-abfrage machst, fragst du zunächst das passwort vom benutzer ab und verschluesselst dieses. die verschluesslte eingabe kannst du dann mit dem verschluesselten pw in der datenbank vergleichen.

bei Antwort benachrichtigen
mr.escape EDROD „[java] verschlüsselungsmethoden“
Optionen

Nochmal für alle lurker.

MD5 und co. sind keine verschlüsselung für daten sondern erzeugen lediglich einen "fingerabdruck" (signatur, hashwert, usw.). Darum kann man aus solchen werten das original nicht zurückrechnen. Man weiß nicht mal wie lang die daten waren und darum gibt es immer mehrere (genauer: extrem viele) ausgangsdaten mit identischem fingerabdruck.

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
toenzli EDROD „[java] verschlüsselungsmethoden“
Optionen

Dann habe ich wohl nach dem falschen gesucht. Ich muss das Passwort des Datenbankzugriffs in einem INI File abspeichern. Allerdings wird das Programm an externe Firmen verkauft, die dann Zugriff auf den SQL Server intern in unserer Firma haben. Das Passwort für den SQL Server muss abgespeichert werden, allerdings nicht im Klartext. Die Verschlüsselung kann auch ziemlich simpel sein. Hat jemand eine Idee?

Danke und Gruss

bei Antwort benachrichtigen