Antwort
 
Themen-Optionen Thema durchsuchen
Alt 14.03.2007, 10:52 Nach oben    #1
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard [C/PHP -> mcrypt] Zu kurzer Key

Ich hab nen PHP-Code der mit mcrypt, TripleDES und dem benötigten Key arbeitet. Er funktioniert, kein Ding.

Mit Java hab ich aber bei dem gleichen Key die Meldung, dass die Keygröße nicht stimmt.

Wikipedia meint dazu, dass der TripleDES Key 24 Zeichen, also 168 Bits lang sein muss.

Nun hab ich geschaut was PHP da macht:
Zitat:
Zitat von PHP Manual
mcrypt_generic_init:
The maximum length of the key should be the one obtained by calling mcrypt_enc_get_key_size() and every value smaller than this is legal.
Wie man sieht werden alle Key bis 24 Zeichen als korrekt anerkannt.

Mein eigentliches Problem ist nun, dass ich bestehende Dinge Ver- und Entschlüsseln muss und daher den Key brauch. Da TripleDES aber nur mit 168 Bit Key funktioniert, muss mcrypt oder das PHP-Modul von mcrypt den gegebenen Key auf 24 Zeichen auffüllen.

Und genau hier brauch ich Hilfe:

Mein C ist sowas von schlecht, dass ich nicht herausfinde, mit was der Key aufgefüllt wird, um dann TripleDES nutzen zu können.

Ist hier jemand der Lust hat im C-Code zu stöbern und herauszufinden was passiert, wenn der Key zu kurz ist?

Die Mcrypt-Sourcen gibts hier: mcrypt-src

Ich revangiere mich auch bei Gelegenheit
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.03.2007, 14:47 Nach oben    #2
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 146
Standard

Hallo,

ich will Dir nicht die Illusion rauben, aber laut der mcrypt_set_key wird zwar eine Länge len angegeben aber nicht ausgewertet. Die Funktion erwartet immer ein mindestens 24 zeichen langes Feld user_key, den es in eine interne Struktur umwandelt. Bei kürzeren Feldern dürfte dann, wenn nicht gerade Zugriffsfehler auftreten, ein beliebiger Wert auf Basis der Speichervorbelegung sein. Die Frage ist daher, wie wird unter PHP die mcrypt-Funktion betankt bei kürzeren Schlüsseln.

Gruß,
Jumepr, the II.
JumperII ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.03.2007, 15:03 Nach oben    #3
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Naja irgendwo muss der Key ja aufgefüllt werden

Falls du noch lust hast, schau dir doch das mcrypt-Modul von PHP4 an, vielleicht kannst du mir dann die Frage beantworten

Hier gehts zur Quelle: http://crypto.riken.go.jp/archives/l...p/php4-mcrypt/ ( php4-mcrypt_4.3.10.orig.tar.gz )
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.03.2007, 15:22 Nach oben    #4
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 146
Standard

Also ich bin mir gar nicht sicher, dass hier ein Key aufgefüllt wird. mcrypt unterstützt verschiedene Keys. Anhand der Schlüssellänge ermittelt er, welchen Algorithmus er verwenden soll. Entspricht der Key keiner der vordefinierten Längen, wird der Algorithmus verwendet, der am nächsten dran ist. D.h. bei 24, 20, 16, 12 Zeichen wird ein 19-zeichen key versucht, mit dem Algorithmus des 16-Zeichen-Keys zu verarbeiten.

Ergo: Vermutlich hast Du dann kein TripleDES.

Ach ja, ich hatte mir die Sourcen vom 5'er php angesehen .... das Geheimnis liegt tatsächlich in der zentralen mcrypt-start-funktion (mcrypt.c: internal_init_mcrypt).

gruß,
Jumper, the II.
JumperII ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.03.2007, 16:18 Nach oben    #5
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Die PHP-Methode zum verschlüsseln:
PHP-Code:
function _encrypt($cleartext$key "xxxxxxxxxxxxxxxxxx") {
    
$td mcrypt_module_open (MCRYPT_TripleDES""MCRYPT_MODE_ECB"");
    
$iv mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);
    
mcrypt_generic_init ($td$key$iv);
    
$encrypted_data bin2hex(mcrypt_generic ($td$cleartext));
    
mcrypt_generic_end ($td);
    return 
$encrypted_data;
}

// Hilfsfunktion zur Umwandlung von Binär- in Hexwerte
function hex2bin($data) {
    
$corrected ereg_replace("[^0-9a-fA-F]","",$data);
    return 
pack("H".strlen($corrected),$corrected);

Dort wird doch explizit TripleDES "verlangt".
Ich glaube kaum das PHP einfach den Verschlüsselungsmechanismus ändert ohne wenigstens ne Warnung zu geben...

Aber selbst wenn ich kein TripleDES hab, was hab ich dann?
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.03.2007, 16:58 Nach oben    #6
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 146
Standard

Ohhhh ... Ein Beispiel ..... und unsereiner muss nicht mehr raten .....

In dieser Definition werden Key und Iv auf die jeweilige Länge festgeschraubt und auf 0 (Null) gesetzt .... Anschließend werden die vorhandenen Werte in die neuen Speicherbereiche hinein kopiert (längengeprüft).

Das ganze geschieht im Ext_Module mcrypt in PHP.

Also alle Werte zum ende mit '\x0' auffüllen.

Gruß,
Jumper, the II.
JumperII ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.03.2007, 18:03 Nach oben    #7
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Bzgl Beispiel: das ist firmeninterna, musste daher erst erlaubnis einholen...
Dummyfrage: wie mach ich das in java? also \x0 an nen String hängen bzw byte[] erweitern...
und das encoding ist doch dann auch wichtig oder?
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.03.2007, 18:09 Nach oben    #8
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 146
Standard

Och nee ... hast Du nicht einen Code Schnipsel? Ist einfacher .....

/EDIT: Ggf. per PN ...

Geändert von JumperII (15.03.2007 um 18:16 Uhr).
JumperII ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.03.2007, 18:17 Nach oben    #9
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Habs hinbekommen (stell mich dümmer an als ich bin )
aber ich hab jetzt ClassCastExceptions... alles scheisse ey
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.03.2007, 02:00 Nach oben    #10
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 146
Standard

Ach ... das bekommst Du jetzt auch noch hin *gg*
JumperII ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.03.2007, 10:00 Nach oben    #11
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Ha alles sch...
Ich verschlüssel so gut jetzt, dass ich 1. nie das gleiche verschlüsselte Ergebnis am ende raus hab, 2. der sich von php unterscheidet und 3. ich nicht mehr entschlüsseln kann, da ich ne BadPaddingException bekomme...
also irgendwie haut das alles nicht hin...
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.03.2007, 10:06 Nach oben    #12
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 146
Standard

Ich schau mal ... vielleicht am WE oder ansonsten nächste Woche ....
JumperII ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.04.2007, 17:10 Nach oben    #13
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 146
Standard

So, es hat zwar etwas länger gedauert ... dafür hole ich den hier noch mal aus der Versenkung.

Mittels Java kann ich erst einmal nicht nachvollziehen, wo WarrenFaith seinen Fehler hat. Hier eine simple Lösung zu TripleDES in Java ... Auch gleichzeitig eine Prinzip-Lösung für Ver-/Entschlüsselung unter Java

Code:
import java.security.AlgorithmParameters;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.SecretKeySpec;





public class test1 {

  private static String byteArray2HexString( byte[] byteArray) {
    return( byteArray2HexString( byteArray, byteArray.length));
  }
  
  private static String byteArray2HexString( byte[] byteArray, int len) {
    StringBuffer buf = new StringBuffer();
    for( int l00 = 0; l00 < len; l00++) {
      byte b00 = byteArray[l00];
      int pos = (b00 >> 4) & 0xf;
      buf.append( "0123456789ABCDEF".substring( pos, pos+1));
      pos = (b00) & 0xf;
      buf.append( "0123456789ABCDEF".substring( pos, pos+1));
    }
    return( buf.toString());
  }

  public static void main( String[] args) {
    if( args.length < 2) {
      System.out.println( "Using: test1 <key> <text>\n");
      System.exit( 1);
    }
    
    String testKey = args[0];
    String testText = args[1];

    System.out.println( "Key:      " + testKey);
    System.out.println( "Text:     " + testText);
    
    try {
      // Konvertiere Key in ein verarbeitbares Objekt
      SecretKeyFactory skf = SecretKeyFactory.getInstance( "DESede");   // TribleDES-KeyFactory 
      byte[] desKeyData = new byte[DESedeKeySpec.DES_EDE_KEY_LEN];      // byte-array
      for( int l00 = 0; l00 < DESedeKeySpec.DES_EDE_KEY_LEN; l00++) {   // memset -> 0
        desKeyData[l00] = 0;
      }
      int len = testKey.length();                                       // prüfe, ob die Schlüssellänge zu kurz ist
      if( len > DESedeKeySpec.DES_EDE_KEY_LEN) {
        len = DESedeKeySpec.DES_EDE_KEY_LEN;
      }
      for( int l00 = 0; l00 < len; l00++) {                             // kopiere Schlüssel ein 
        desKeyData[l00] = testKey.getBytes()[l00];                      // (der rest ist mit 00 aufgefüllt!)
      }
      
      DESedeKeySpec desKeySpec = new DESedeKeySpec(desKeyData);         // TribleDES-Key Specification
      SecretKey sk = skf.generateSecret( desKeySpec);                   // TribleDES-Key
      
      Cipher c00 = Cipher.getInstance( "DESede/ECB/NoPadding");         // Cipher holen mit Parameter
                                                                        //    DESede -> TribleDES
                                                                        //    ECB -> MCRYPT_MODE_ECB
                                                                        //    NoPadding -> Default bei mcrypt?
      System.out.println( "Original: " + byteArray2HexString( testText.getBytes()));

      c00.init( Cipher.ENCRYPT_MODE, sk);                               // Cipher zur Verschlüsselung vorbereiten
      byte[] testEncrypt = c00.doFinal( testText.getBytes());           // Encrypt
      System.out.println( "Encrypt:  " + byteArray2HexString( testEncrypt));
      
      c00.init( Cipher.DECRYPT_MODE, sk);                               // Cipher zur Entschlüsselung vorbereiten
      byte[] testDecrypt = c00.doFinal( testEncrypt);                   // Decrypt
      System.out.println( "Decrypt:  " + byteArray2HexString( testDecrypt));
      
    }
    catch( Exception e) {
      System.out.println( "Error ... " + e);
      e.printStackTrace( System.out);
    }
  }
}
Und hier meine Ausgaben ... zuerst PHP (Auszug
Code:
Testtext: Hallo, dies ist der Test zur Verschlüsselung ...
Testtext(hex:( 48616c6c6f2c206469657320697374206465722054657374207a7572205665727363686cfc7373656c756e67202e2e2e
Testkey: 0000
Encrypt: 4a0371988d67ad0ea7b60ac1c77a743f4c01a447a955235e20a3127e15385cc516f9bbbb5f62a8b37b9a873e530ef655
und für Java
Code:
Key:      0000
Text:     Hallo, dies ist der Test zur Verschlüsselung ...
Original: 48616C6C6F2C206469657320697374206465722054657374207A7572205665727363686CFC7373656C756E67202E2E2E
Encrypt:  4A0371988D67AD0EA7B60AC1C77A743F4C01A447A955235E20A3127E15385CC516F9BBBB5F62A8B37B9A873E530EF655
Decrypt:  48616C6C6F2C206469657320697374206465722054657374207A7572205665727363686CFC7373656C756E67202E2E2E
Wenn noch Fragen bestehen ... immerzu

Gruß,
Jumper, the II.
JumperII ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.04.2007, 17:37 Nach oben    #14
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Hey danke dir, ich werd das heut oder morgen mal durchtesten, aber ich denke ich weiß schon wo ich scheitern werde :/ and der Keylängenüberprüfung.

Aber ich danke dir schonmal für deine Arbeit. Bis morgen...
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.04.2007, 18:05 Nach oben    #15
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 146
Standard

*hihihi* Key-Längenprüfung? Ich hatte es mit einem Key "0000" hier vorrechnen lassen ...... Das ist inklusive .....

Der Java-Code sollte so 1:1 mit Key und Ver-/Entschlüsselung mit php/mcrypt arbeiten ... alles andere wäre Murks und hätte Dein Problem nicht getroffen ....

Gruß,
Jumper, the II.
JumperII ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.04.2007, 18:26 Nach oben    #16
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Verdammt tatsache, recht haste. Hab deinen Key komplett übersehen

Das machts doppelt interessant. Ich meld mich. Versprochen!
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.04.2007, 19:00 Nach oben    #17
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

So erste Tests, gleiches Ergebnis :/

Wenn ich verschlüssel, dann bekomme ich z.B. sowas raus: [B@8997d1
Das ist ja nunmal total was anderes, da dort Sonderzeichen drin sind die gar nicht drin sein drüften.

Und da das ding ne länge von 9 Zeichen hat, ist klar das ich das als Antwort bekomme:
Code:
java.lang.RuntimeException: javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
	at com.dpmedia.rainbow.controller.utils.TripleDes.decrypt(TripleDes.java:57)
	at com.dpmedia.rainbow.controller.utils.TripleDesTest.test(TripleDesTest.java:16)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:40)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Caused by: javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
	at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
	at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
	at com.sun.crypto.provider.DESedeCipher.engineDoFinal(DashoA12275)
	at javax.crypto.Cipher.doFinal(DashoA12275)
	at com.dpmedia.rainbow.controller.utils.TripleDes.decrypt(TripleDes.java:55)
	... 24 more
Hier mal mein Quellcode (ich hab deins bissle umbauen müssen, da System.out nicht zur Verfügung steht...
java Code:
  1. public class TripleDes {
  2.     private static final Logger LOGGER = Logger.getLogger(TripleDes.class);
  3.  
  4.     public static String encrypt(String text) {
  5.         String testKey = "keymit!zeichen";
  6.         String encrypted = "";
  7.  
  8.         try {
  9.             // Konvertiere Key in ein verarbeitbares Objekt
  10.             SecretKeyFactory skf = SecretKeyFactory.getInstance( "DESede");      // TribleDES-KeyFactory
  11.             byte&#91;&#93; desKeyData = new byte&#91;DESedeKeySpec.DES_EDE_KEY_LEN&#93;;         // byte-array
  12.             for( int l00 = 0; l00 < DESedeKeySpec.DES_EDE_KEY_LEN; l00++) {      // memset -> 0
  13.                 desKeyData&#91;l00&#93; = 0;
  14.             }
  15.             int len = testKey.length();                                          // prüfe, ob die Schlüssellänge zu kurz ist
  16.             if( len > DESedeKeySpec.DES_EDE_KEY_LEN) {
  17.                 len = DESedeKeySpec.DES_EDE_KEY_LEN;
  18.             }
  19.             for( int l00 = 0; l00 < len; l00++) {                               // kopiere Schlüssel ein
  20.                 desKeyData&#91;l00&#93; = testKey.getBytes()&#91;l00&#93;;                      // (der rest ist mit 00 aufgefüllt!)
  21.             }
  22.  
  23.             DESedeKeySpec desKeySpec = new DESedeKeySpec(desKeyData);           // TribleDES-Key Specification
  24.             SecretKey sk = skf.generateSecret( desKeySpec);                     // TribleDES-Key
  25.  
  26.             Cipher c00 = Cipher.getInstance("DESede/ECB/NoPadding");            // Cipher holen mit Parameter
  27.                                                                                 //    DESede -> TribleDES
  28.                                                                                 //    ECB -> MCRYPT_MODE_ECB
  29.                                                                                 //    NoPadding -> Default bei mcrypt?
  30.  
  31.             c00.init( Cipher.ENCRYPT_MODE, sk);                                 // Cipher zur Verschlüsselung vorbereiten
  32.             byte&#91;&#93; testEncrypt = c00.doFinal( text.getBytes());             // Encrypt
  33.             encrypted = byteArray2HexString(testEncrypt);
  34.         } catch( Exception e) {
  35.             LOGGER.warn(" da klappte was nicht ");
  36.         }
  37.         return encrypted;
  38.     }
  39.  
  40.     public static String decrypt(String text) {
  41.         String testKey = "keymit!zeichen";
  42.         String decrypted = "";
  43.  
  44.         try {
  45.             // Konvertiere Key in ein verarbeitbares Objekt
  46.             SecretKeyFactory skf = SecretKeyFactory.getInstance( "DESede");      // TribleDES-KeyFactory
  47.             byte&#91;&#93; desKeyData = new byte&#91;DESedeKeySpec.DES_EDE_KEY_LEN&#93;;         // byte-array
  48.             for( int l00 = 0; l00 < DESedeKeySpec.DES_EDE_KEY_LEN; l00++) {      // memset -> 0
  49.                 desKeyData&#91;l00&#93; = 0;
  50.             }
  51.             int len = testKey.length();                                          // prüfe, ob die Schlüssellänge zu kurz ist
  52.             if( len > DESedeKeySpec.DES_EDE_KEY_LEN) {
  53.                 len = DESedeKeySpec.DES_EDE_KEY_LEN;
  54.             }
  55.             for( int l00 = 0; l00 < len; l00++) {                               // kopiere Schlüssel ein
  56.                 desKeyData&#91;l00&#93; = testKey.getBytes()&#91;l00&#93;;                      // (der rest ist mit 00 aufgefüllt!)
  57.             }
  58.  
  59.             DESedeKeySpec desKeySpec = new DESedeKeySpec(desKeyData);           // TribleDES-Key Specification
  60.             SecretKey sk = skf.generateSecret( desKeySpec);                     // TribleDES-Key
  61.  
  62.             Cipher c00 = Cipher.getInstance("DESede/ECB/NoPadding");            // Cipher holen mit Parameter
  63.                                                                                 //    DESede -> TribleDES
  64.                                                                                 //    ECB -> MCRYPT_MODE_ECB
  65.                                                                                 //    NoPadding -> Default bei mcrypt?
  66.  
  67.             c00.init( Cipher.DECRYPT_MODE, sk);                                 // Cipher zur Verschlüsselung vorbereiten
  68.             byte&#91;&#93; testEncrypt = c00.doFinal( text.getBytes());             // Encrypt
  69.             decrypted = byteArray2HexString(testEncrypt);
  70.         } catch( Exception e) {
  71.             LOGGER.warn(" da klappte was nicht ");
  72.         }
  73.         return decrypted;
  74.     }
  75.  
  76.     private TripleDes() {
  77.     }
  78.    
  79.     private static String byteArray2HexString( byte&#91;&#93; byteArray) {
  80.         return( byteArray2HexString( byteArray, byteArray.length));
  81.     }
  82.  
  83.     private static String byteArray2HexString( byte&#91;&#93; byteArray, int len) {
  84.         StringBuffer buf = new StringBuffer();
  85.         for( int l00 = 0; l00 < len; l00++) {
  86.             byte b00 = byteArray&#91;l00&#93;;
  87.             int pos = (b00 >> 4) & 0xf;
  88.             buf.append( "0123456789ABCDEF".substring( pos, pos+1));
  89.             pos = (b00) & 0xf;
  90.             buf.append( "0123456789ABCDEF".substring( pos, pos+1));
  91.         }