安卓使用加解密異常集合

今天在使用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類結束
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章