java MD5演算法返回數字型字串

來源:互聯網
上載者:User

常有人問及MD5演算法為何有些程式片斷返回完全數字型結果而有些返回數字與字母的混合字串。
其實兩種返回結果只是因為加密結果的不同顯示形式,Blog中已經有.Net的實現,在此附加JAVA實現,供參考。
JAVA的標準類庫理論上功能也很強大,但由於虛擬機器/運行時的實現太多,加之版本差異,有些代碼在不同環境下運行會出現奇怪的異常結果,尤其以涉及字元集的操作為甚。
package com.bee.framework.common;
import java.security.MessageDigest;
public class MD5Encrypt {
  public MD5Encrypt() {
  }
  private final static String[] hexDigits = {
      "0", "1", "2", "3", "4", "5", "6", "7",
      "8", "9", "a", "b", "c", "d", "e", "f"};
  /**
   * 轉換位元組數組為16進位字串
   * @param b 位元組數組
   * @return 16進位字串
   */
  public static String byteArrayToString(byte[] b) {
    StringBuffer resultSb = new StringBuffer();
    for (int i = 0; i < b.length; i++) {
      //resultSb.append(byteToHexString(b[i]));//若使用本函數轉換則可得到加密結果的16進位表示,即數字字母混合的形式
      resultSb.append(byteToNumString(b[i]));//使用本函數則返回加密結果的10進位數字字串,即全數字形式
    }
    return resultSb.toString();
  }
  private static String byteToNumString(byte b) {
    int _b = b;
    if (_b < 0) {
      _b = 256 + _b;
    }
    return String.valueOf(_b);
  }
  private static String byteToHexString(byte b) {
    int n = b;
    if (n < 0) {
      n = 256 + n;
    }
    int d1 = n / 16;
    int d2 = n % 16;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.