2016-04-26 11 views
1

iはthisチュートリアル暗号化された文字列は、私が読んで] [バイトを文字列に変換しようとすると、私は、文字列としてSQLデータベースで暗号化されたパスワードを格納する必要があります[]私はパスワードを暗号化する必要が

を使用していますバイトを私は問題がある、バイト[]は、元の暗号化されたバイト[]

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] 
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); 
} 

しかし、私は、元のバイトを入れた場合(バイト[]はテキスト) {

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をデータベースに暗号化して保管することを計画している場合は、しないでください。データベースにアクセスできる攻撃者は、パスワードを取得できます。代わりに、意図的に検索を遅くする方法で** salted **ハッシュを保存してください。詳細については、https://nakedsecurity.sophos.com/2013/11/20/serious-security-how-to-store-your-users-passwords-safely/ –

答えて

2

Base64.Encoder(Java 8以降ではjava.util)を使用してバイト配列をStringにエンコードし、DBに保存してDBからStringに読み込み、Base64.decoderを使用してバイト配列にデコードします

1

あなたは何を見ている公共の文字列decrypteを書く場合コンソール上に表示されているのはbyte[]toString()メソッドの結果です。それは実際の内容を表すものではありません。代わりに、オブジェクトのIDです。あなたは異なるオブジェクトを持っているので、それらは異なっています。

また、String.valueOf(encrypted)を使用すると、valueOf(byte[])がないため、valueOf(Object) methodにフォールバックします。これは、配列の内容の文字列表現ではなく、toString()によって生成された同じオブジェクトIDを提供します。

new String(encrypted)バイト配列の内容を読み込み可能な文字列に変換します。

+0

を参照してください。新しい文字列(暗号化された)を使用すると、have +^$は正常ですか?私はどのようにバイト[]にデータベースの文字列を変換するのか分からないのですか? –

+0

これはエンコーディングの問題のようです。使用しているエンコーディングを指定できるコンストラクタもあります。 –

関連する問題