【问题标题】:hash md5 result not changing哈希 md5 结果不变
【发布时间】:2023-12-14 12:15:01
【问题描述】:

我的 android 应用是校验和哈希 md5。一切看起来都正常,但每次我点击“生成 md5”按钮时,哈希值都不会改变。生成的哈希看起来像一个“空”字符(d41d8cd98f00b204e9800998ecf8427e)。这是我的代码。感谢您的帮助。

package com.example.kalkulator;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

    private static final String TAG = "MD5";
    //private TextView textView_hasil;

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

        Button button1 = (Button)findViewById(R.id.button1);
        Button button2 = (Button)findViewById(R.id.button2);
        final EditText editText1 = (EditText)findViewById(R.id.editText1);
        final TextView textView3 = (TextView)findViewById(R.id.textView3);

        final String EditText1 = editText1.getText().toString();

        button1.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                hitungMD5(EditText1);
            }

            private void hitungMD5(String editText1) {
                // TODO Auto-generated method stub
                try
                {
                    MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
                    digest.update(editText1.getBytes());
                    byte messageDigest[] = digest.digest();

                    StringBuffer MD5Hash = new StringBuffer();
                    for(int i = 0; i < messageDigest.length; i++)
                    {
                        String h = Integer.toHexString(0xFF & messageDigest[i]);
                        while(h.length() < 2)
                            h = "0" + h;
                        MD5Hash.append(h);
                    }

                    textView3.setText("Hash Anda: " + MD5Hash);
                }
                catch(NoSuchAlgorithmException e)
                {
                    e.printStackTrace();
                }
            }


        });

        button2.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                editText1.setText("");
                textView3.setText("");
            }
        });

    }

【问题讨论】:

    标签: java android md5


    【解决方案1】:

    您可能希望在每次单击按钮时更新传递给hitungMD5 的字符串。而不是拥有

    hitungMD5(EditText1);
    

    使用

    hitungMD5(editText1.getText().toString());
    

    这将在您按下按钮时将editText1的实际内容传递给hitungMD5

    【讨论】:

      【解决方案2】:

      您在onClick(View v) 中使用变量EditText1,但您从未更新它。您需要将editText1.getText() 移动到onClick(View v)

      button1.setOnClickListener(new OnClickListener()
      {
          @Override
          public void onClick(View v)
          {
              String text = editText1.getText().toString();
              hitungMD5(text);
          }
      

      【讨论】: