Blowfish Verschlüsselung

  • Antworten:3
samtux
  • Forum-Beiträge: 147

21.04.2014, 01:29:21 via Website

Hallo!

Ich möchte in meiner App eine Verschlüsselung über Blowfish einbauen. Dazu habe ich schon folgenden Code:

    keygenerator = KeyGenerator.getInstance("Blowfish");
    SecretKey secretkey = keygenerator.generateKey();

    String Key = "meinKeyABC";
    byte[] KeyData = Key.getBytes();
    SecretKeySpec KS = new SecretKeySpec(KeyData, "Blowfish");
    Cipher cipher = Cipher.getInstance("Blowfish");
    cipher.init(Cipher.ENCRYPT_MODE, KS);

    cipher.init(Cipher.ENCRYPT_MODE, secretkey);
    byte[] encrypted = cipher.doFinal(message.getBytes());
    String verschluesselt = new String(encrypted);

Den String verschluesselt übertrage ich dann an meinen Server und speichere Ihn erstmal in der Datenbank (via PHP). Später ruft der Browser die Daten ab und entschlüsselt diese. (Der Browser kennt den Schlüssel). Der JavaScript-Teil funktioniert auch. Den habe ich getestet.
Das Problem ist jetzt nur, dass der Browser entweder nur wirre Zeichen oder nichts sichtbares entschlüsselt.

Ich vermute, dass der Fehler beim Konvertieren als String auftritt. Wie muss ich das machen?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

21.04.2014, 08:35:19 via App

Am besten du benutzt den debugger und schause was in der Byte encryptet drinsteht. Vlt. solltest du dein bytearray in einer schleife durchgehen.

— geändert am 21.04.2014, 08:36:05

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
impjor
  • Forum-Beiträge: 1.793

21.04.2014, 13:03:01 via Website

Warum benutzt du zwei Keys? Du musst cipher.init(...) einmal mit deinem Key (KS) aufrufen.

Ich bin mir grade unsicher, ob du einfach mit new String(byte[]) das byte[] in einen String "konvertieren" kannst. Selbst wenn das ginge, müsstest du mit den verschiedenen charsets aufpassen (UTF-8, ASCII usw.). Besser die bytes (z.B. in hexadezimaler Schreibweise) als String speichern, siehe auch hier: http://tech.chitgoks.com/2009/05/18/convert-hexadecimal-to-binary-using-java/

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
samtux
  • Forum-Beiträge: 147

21.04.2014, 13:44:49 via Website

Du musst cipher.init(...) einmal mit deinem Key (KS) aufrufen.

Also so?:

    keygenerator = KeyGenerator.getInstance("Blowfish");
    // SecretKey secretkey = keygenerator.generateKey();

    String Key = "meinKeyABC";
    byte[] KeyData = Key.getBytes();
    SecretKeySpec KS = new SecretKeySpec(KeyData, "Blowfish");
    Cipher cipher = Cipher.getInstance("Blowfish");
    cipher.init(Cipher.ENCRYPT_MODE, KS);

    byte[] encrypted = cipher.doFinal(message.getBytes());
    String verschluesselt = new String(encrypted);

http://tech.chitgoks.com/2009/05/18/convert-hexadecimal-to-binary-using-java/

Die Funktion werde ich mal mit einbauen...

EDIT: Was muss ich bei der Funktion als HEX_STRING nehmen?

— geändert am 21.04.2014, 14:04:47

Antworten