0

誰かがハッシュコードの仕組みを説明してもらえますか? 私はアンドロイドが初めてです。私がやりたいことは、ユーザーが入力した編集テキストのハッシュコードを取得することだけです。

これは私のコードです:

public class MainActivity extends Activity {
EditText txtCode, txtID;
Button enter;

@Override
        protected void onCreate(Bundle savedInstanceState) 
     super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


     txtID = (EditText) findViewById(R.id.txtid);
     txtCode = (EditText) findViewById(R.id.txtcode);
     enter = (Button) findViewById(R.id.button1);


         enter.setOnClickListener(new OnClickListener() 
            {

        @Override
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub

            String a = txtID.getText().toString();
             int b = a.hashCode();
            txtCode.setText(b);
        }
    });
}
4

1 に答える 1

6

あなたのコードは正しいです。これは、テキスト ボックスに入力されたテキストのハッシュコードを取得する方法です。

(または、少なくとも、問題ある場合、それはコードのその側面にはありません。)

の意味と目的を誤解しているかもしれませんhashcode。このメソッド (すべての Java 参照型によって実装されます) はint、ターゲット オブジェクトの単純な 32 ビット ハッシュを表す を返します。

  • これは暗号化ハッシュではありません。暗号ハッシュは別の方法で生成されます。ハッシュが「強い」と見なされるには、32 ビットをはるかに超える必要があります。
  • ユニークではありません。ハッシュは決して一意ではありません。
  • それは「おそらくユニーク」でさえありません。何度も試すと、文字列のハッシュとの衝突が発生する可能性があります。実際、ハッシュは 32 ビット長であるため、異なる文字列を試した後、少なくとも 1 回は衝突が発生することが保証されています。そして、数学によると、それよりもはるかに早く2^32衝突する可能性があります。

私のコードには実際にはエラーはありませんが、Enterをクリックするとエミュレーターが強制的に閉じられます。

logcatその「強制終了」の原因を探すために使用します。直接の原因である例外のスタック トレースを含むエントリが存在する可能性があります。スタックトレースの意味がわからない場合は、質問に追加してください...

于 2013-05-29T03:35:36.270 に答える