快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

java MD5算法返回数字型字串

 

常有人问及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;
    return hexDigits[d1] + hexDigits[d2];
  }

  public static String MD5Encode(String origin) {
    String resultString = null;

    try {
      resultString = new String(origin);
      MessageDigest md = MessageDigest.getInstance(\"MD5\");
      resultString =
byteArrayToString(md.digest(resultString.getBytes()));
    }
    catch (Exception ex) {

    }
    return resultString;
  }

  public static void main(String[] args) {
    MD5Encrypt md5encrypt = new MD5Encrypt();
    System.out.println(MD5Encode(\"10000000\"));
  }
}






返回类别: 教程
上一教程: 调整JavaTM 的I/O性能(一)(zt)
下一教程: java反射技术(一)

您可以阅读与"java MD5算法返回数字型字串"相关的教程:
· JAVA MD5算法返回数字型字串
· JAVA 的MD5加密算法源代码
· JAVA 的MD5加密算法源代码
· 使用java.util.Calendar返回间隔天数
· Java2下Applet数字签名详细实现方式
    微笑服务 优质保证 索取样品