2016-04-27 19 views
0

Ich arbeite an einem Android-Projekt, wo ich sowohl Verschlüsselungs- als auch Entschlüsselungsmethoden verwenden muss. wie unten Szenario:Textverschlüsselungs-/Entschlüsselungsmethoden Java

  1. Benutzertyp Passwort in SignupActivity
  2. Passwort des Benutzers verschlüsselt
  3. in Anmelden Aktivität Passwort aus der Datenbank abgerufen und entschlüsselt Methode

mein Problem in Schritt genannt wird 3 es gibt immer Null von der Entschlüsselung zurück.

Codebeispiel:

SignUpActivity:

String name_data = name.getText().toString(); 
    String email_data = email.getText().toString(); 
    String password_data = password.getText().toString(); 

    password_data = enc.getEncryptedText(password_data); 

LoginActivity

  String password_in_database = helper.searchPassword(email_data); 
      password_in_database = enc.getDecryptedText(password_in_database); 

Verschlüsselung/Entschlüsselung Klasse

public class EncryptDecryptStringWithDES { 

    public static Cipher ecipher; 
    public static Cipher dcipher; 

    public static SecretKey key; 


    public static String getEncryptedText(String sty) throws Exception { 

     // generate secret key using DES algorithm 
     key = KeyGenerator.getInstance("DES").generateKey(); 
     ecipher = Cipher.getInstance("DES"); 


     // initialize the ciphers with the given key 

     ecipher.init(Cipher.ENCRYPT_MODE, key); 




     sty = encrypt(sty); 

     return sty; 
    } 

    public static String getDecryptedText(String sty) throws Exception { 
    key = KeyGenerator.getInstance("DES").generateKey(); 

     dcipher = Cipher.getInstance("DES"); 
     dcipher.init(Cipher.DECRYPT_MODE, key); 
     sty = decrypt(sty); 

     return sty; 

    } 


    public static String encrypt(String str) { 

     try { 

      // encode the string into a sequence of bytes using the named charset 

      // storing the result into a new byte array. 

      byte[] utf8 = str.getBytes("UTF8"); 

      byte[] enc = ecipher.doFinal(utf8); 

// encode to base64 

      enc = BASE64EncoderStream.encode(enc); 

      return new String(enc); 

     } catch (Exception e) { 

      e.printStackTrace(); 

     } 

     return null; 

    } 

    public static String decrypt(String str) { 

     try { 

      // decode with base64 to get bytes 

      byte[] dec = BASE64DecoderStream.decode(str.getBytes()); 

      byte[] utf8 = dcipher.doFinal(dec); 

// create new string based on the specified charset 

      return new String(utf8, "UTF8"); 

     } catch (Exception e) { 

      e.printStackTrace(); 

     } 

     return null; 

    } 
+0

Mein Projekt ist eine Password Manager-Anwendung, speichert Benutzerkennwörter und listet alle Kennwörter gleichzeitig auf. deshalb muss ich verschlüsseln und entschlüsseln. Ich denke, das Problem ist es immer unterschiedliche Schlüssel für beide Methoden generieren –

+0

Debug: hex dump die Schlüssel. Wie speichern Sie den Verschlüsselungsschlüssel sicher? Verwenden Sie nicht DES, es ist nicht mehr sicher, verwenden Sie AES. – zaph

Antwort

0

Zunächst einmal nicht DES verwenden, verwenden AES.

Das Beste, was Sie tun können, ist nicht das Passwort speichern. Verwenden Sie stattdessen das Kennwort als Schlüssel für AES. Das bedeutet, dass Ihr Benutzer das Kennwort bei jedem Start eingeben muss, aber es ist die sicherste Lösung.

Wenn Sie das Passwort lokal speichern müssen, benötigen Sie einen konsistenten Schlüssel - Ihr Code generiert bei jedem Funktionsaufruf einen neuen Schlüssel. Erzeugen Sie einen neuen Schlüssel bei der Anmeldung und speichern Sie ihn verschlüsselt mit einem festen Schlüssel in den gemeinsamen Einstellungen.