2016-04-26 5 views
1

Мне нужно шифровать пароль Я использую this учебникзашифрованной строки в байтах []

мне нужно хранить зашифрованный пароль в базе данных SQL в виде строки, когда я пытаюсь прочитать и преобразовать строку в Byte [] у меня есть проблема, байт [] отличается от оригинального зашифрованного байта []

byte[] encrypted = encryper.encrypte("pavel"); 

      Log.i("info","encrypted : "+encrypted); 

      String pass = String.valueOf(encrypted); 

      byte[] passBytes = pass.getBytes(); 

      Log.i("info","passBytes : "+passBytes); 

      Log.i("info","decrypted : "+encryper.decrypte(passBytes)); 

журнала

I/info: encrypted : [[email protected] 
I/info: passBytes : [[email protected]e3d 
I/info: decrypted : 

метод расшифровывать

public String decrypte(byte[] text) 
{ 

    byte[] textDecrypted = new byte[0]; 

    try { 

     cipher.init(Cipher.DECRYPT_MODE, myDesKey); 
     textDecrypted = cipher.doFinal(text); 
     Log.i("info","do final : "+textDecrypted); 

    }catch (InvalidKeyException e) {e.printStackTrace(); 
    }catch (IllegalBlockSizeException e){e.printStackTrace();} 
    catch (BadPaddingException e){e.printStackTrace();} 

    return new String(textDecrypted); 
} 

но если я пишу decrypte общественности String (байты [] текст) {

byte[] textDecrypted = new byte[0]; 

    try { 

     cipher.init(Cipher.DECRYPT_MODE, myDesKey); 
     textDecrypted = cipher.doFinal(text); 
     Log.i("info","do final : "+textDecrypted); 

    }catch (InvalidKeyException e) {e.printStackTrace(); 
    }catch (IllegalBlockSizeException e){e.printStackTrace();} 
    catch (BadPaddingException e){e.printStackTrace();} 

    return new String(textDecrypted); 
} 

, но если я ставлю оригинальные байты [] все работы

encryper.decrypte(encrypted) 
+0

О ваших требованиях: Если вы делаете эту работу, чтобы узнать что-то/для удовольствия: Отлично! Если вы планируете хранить пароли DES, зашифрованные в базе данных: Не делайте этого. Злоумышленники, имеющие доступ к базе данных, могут получить пароль. Вместо этого сохраните ** соленый ** хэш с методом, который намеренно делает поиск медленным. Для получения дополнительной информации см. Https://nakedsecurity.sophos.com/2013/11/20/serious-security-how-to-store-your-users-passwords-safely/ –

ответ

2

Я хотел бы кодировать массив байтов в строку, используя Base64.Encoder (java.util, так как Java 8), а затем сохранить его в БД, а затем прочитать его из БД в строку и декодировать его в массив байтов с использованием Base64.decoder

1

Что вы видите на консоли - результат метода toString()byte[]. Он не представляет собой фактическое содержимое. Вместо этого это ID для объекта. Они разные, потому что у вас разные объекты.

Также, если вы используете String.valueOf(encrypted), он вернется к valueOf(Object) method, потому что нет valueOf(byte[]). Это не дает строкового представления содержимого вашего массива, но тот же идентификатор объекта, созданный toString().

Использование, например. new String(encrypted), чтобы преобразовать содержимое массива байтов в читаемую строку.

+0

, когда я использую новую строку (зашифрованную), у меня есть + ^ $ его нормальный? и я не понимаю, как преобразовать строку в базу данных в байт []? –

+0

Это похоже на проблему с кодировкой. Существуют также конструкторы, в которых вы можете указать кодировку, которую используете. –

Смежные вопросы