今天在使用MD5對明文加密的時候出現異常
異常代碼
MD5EncodeResult =Hex.encodeHexString(md5Bytes);
系統沒報錯,出現也正常運行,但在執行這條語句時,程序異常退出
情況如下
異常完整代碼如下
package com.jluzh.UtilActivity;
import java.security.MessageDigest;
import org.apache.commons.codec.binary.Hex;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.example.networksecurity.R;
public class MD5Activity extends Activity{
public static final String TAG = "MD5";
private static Button MD5Encode;
private static Button MD5Clear;
private static EditText edit_src;
private static TextView text_result;
private static String MD5EncodeResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.md5_layout);
MD5Encode = (Button) findViewById(R.id.MD5Encode);
MD5Clear = (Button) findViewById(R.id.MD5Clear);
edit_src = (EditText) findViewById(R.id.edit_src);
text_result = (TextView) findViewById(R.id.text_result);
//設置MD5 Button加密點擊事件
MD5Encode.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
try {
Log.d(TAG, "執行加密");
//取得編輯框的內容
String src = edit_src.getText().toString();
//使用JDK MD5加密
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] md5Bytes = md.digest(src.getBytes());
Log.d(TAG, "進行轉換");
MD5EncodeResult =Hex.encodeHexString(md5Bytes);
Log.d(TAG, MD5EncodeResult);
//文本框顯示MD5加密後的密文
text_result.setText(MD5EncodeResult);
Log.d(TAG, "加密完成");
} catch (Exception e) {
e.printStackTrace();
}
}//MD5EncodeOnClick結束
});//MD5EncodesetOnClickListener結束
//設置清空內容點擊事件
MD5Clear.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Log.d(TAG, "執行清空");
edit_src.setText("");
text_result.setText("");
Log.d(TAG, "已清空");
}//MD5ClearOnClick結束
});//MD5ClearSetOnClickListener結束
}//MD5ActivityOnCreate結束
}//MD5Activity類結束
程序可以運行
點擊加密出現異常
異常信息
解決方法:
MD5EncodeResult =Hex.encodeHexString(md5Bytes);
要對md5Bytes數組進行16進制轉換
在MD5Activity類中添加一個方法
private static String toHexString(byte[] bytes, String separator) { //轉爲十六進制
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
String hex = Integer.toHexString(0xFF & b);
if(hex.length() == 1){
hexString.append('0');
}
hexString.append(hex).append(separator);
}
return hexString.toString();
}
然後調用方法
MD5EncodeResult =toHexString(md5Bytes,"");
成功運行
無異常代碼如下
package com.jluzh.UtilActivity;
import java.security.MessageDigest;
import org.apache.commons.codec.binary.Hex;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.example.networksecurity.R;
public class MD5Activity extends Activity{
public static final String TAG = "MD5";
private static Button MD5Encode;
private static Button MD5Clear;
private static EditText edit_src;
private static TextView text_result;
private static String MD5EncodeResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.md5_layout);
MD5Encode = (Button) findViewById(R.id.MD5Encode);
MD5Clear = (Button) findViewById(R.id.MD5Clear);
edit_src = (EditText) findViewById(R.id.edit_src);
text_result = (TextView) findViewById(R.id.text_result);
//設置MD5 Button加密點擊事件
MD5Encode.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
try {
Log.d(TAG, "執行加密");
//取得編輯框的內容
String src = edit_src.getText().toString();
//使用JDK MD5加密
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] md5Bytes = md.digest(src.getBytes());
Log.d(TAG, "進行轉換");
MD5EncodeResult =toHexString(md5Bytes,"");
Log.d(TAG, MD5EncodeResult);
//文本框顯示MD5加密後的密文
text_result.setText(MD5EncodeResult);
Log.d(TAG, "加密完成");
} catch (Exception e) {
e.printStackTrace();
}
}//MD5EncodeOnClick結束
});//MD5EncodesetOnClickListener結束
//設置清空內容點擊事件
MD5Clear.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Log.d(TAG, "執行清空");
edit_src.setText("");
text_result.setText("");
Log.d(TAG, "已清空");
}//MD5ClearOnClick結束
});//MD5ClearSetOnClickListener結束
}//MD5ActivityOnCreate結束
private static String toHexString(byte[] bytes, String separator) { //轉爲十六進制
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
String hex = Integer.toHexString(0xFF & b);
if(hex.length() == 1){
hexString.append('0');
}
hexString.append(hex).append(separator);
}
return hexString.toString();
}
}//MD5Activity類結束