2013-05-29 1 views
0

누군가 해시 코드가 어떻게 작동하는지 설명해 주시겠습니까? 나는 안드로이드에서 새로운 사람입니다. 사용자가 입력 한 내 edittext 의 해시 코드를 얻고 싶습니다.해시 코드 사용 방법은 무엇입니까?

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); 
     } 
    }); 
} 
+1

'hashCode()는 Android와 관련이 없습니다. – Ahmad

+1

지금 가지고있는 코드로는 무엇이 작동하지 않습니까? 어떤 오류가 발생하고 있습니까? – Simon

+1

"Object"에 대한 javadoc을보아야합니다. http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html - .equals() /. hashCode() 계약은 다음과 같습니다. 전체 설명했다. – fge

답변

6

귀하의 코드가 정확한지 :

내 코드입니다. 이것이 텍스트 상자에 입력 된 일부 텍스트의 해시 코드를 얻는 방법입니다.

(이 문제가가있는 경우 또는 적어도, 그것은 코드의 측면에서하지 않습니다.)

은 아마도 당신은 의미와 hashcode의 목적을 오해.

  • 그것은 암호화 해시 아니다 : (모든 자바 참조 형식에 의해 구현되는)이 방법은 대상 객체의 단순한 32 비트 해시를 나타내는 int을 반환한다. 암호 해시는 다른 방법으로 생성됩니다. 해시는 32 비트보다 많은 비트가 필요하기 전에 "강"하다고 생각할 수도 있습니다.
  • 고유하지 않습니다. 해시는 결코 고유하지 않습니다.
  • "아마도 유일한"것이 아닙니다. 자주 시도하면 문자열에 해시가 충돌하는 것을 볼 수 있습니다. 사실, 해시가 32 비트이기 때문에 2^32 다른 문자열을 시도한 후에 이 적어도 하나의 충돌을 확인했음을 보장합니다. 그리고 수학은 당신이보다 훨씬 빨리 충돌을 일으킬 가능성이 있다고 말합니다.

오류가 내 코드에 실제로 없다하지만이 항상 내가 입력을 클릭하면 내 에뮬레이터에 가까운 강제로.

logcat을 사용하면 "강제 종료"의 원인을 찾을 수 있습니다. 즉각적인 원인 인 예외에 대한 스택 추적이있는 항목이있을 수 있습니다. Stacktrace가 무엇을 의미하는지 알아내는 데 어려움이있는 경우 질문에 추가하십시오.