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"));
  }
}

时间: 2024-09-05 00:54:43

java MD5算法返回数字型字串的相关文章

JAVA MD5算法应用

        在一些对安全需求比较高的WEB站点中,除了要保证数据的传输有保障之外,数据库的内容也需要做一些处理,像银行之类的系统,要防止外人取得数据,还不能让管理员看到账号和密码.很多时候都是利用MD5算法来保证数据的完整性和安全性,但是MD5算法并不是一个加密算法,它就像人的"指纹"一样,每个人都有指纹,而且指纹都不一样,MD5算法算出的结果,就像数据的指纹一样,任何数据,不论它占用多少空间,它的指纹都能作为这块数据的唯一标识.,SUN公司的JDK文档就描述了如何通过类java.

Java生成MD5算法

原文:http://yilee.info/java-md5-algorithm.html D5即Message-Digest Algorithm 5(信息-摘要算法5),是一种用于产生数字签名的单项散列算法. MD5算法的作用是让大容量信息在用数字签名软件签私人密匙前被"压缩"成一种保密的格式,将一个任意长度的"字节串"通过一个不可逆的字符串变换算法变换成一个128bit的大整数. 即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说

java不变字串

请观察下述代码:   //: Stringer.java public class Stringer { static String upcase(String s) { return s.toUpperCase(); } public static void main(String[] args) { String q = new String("howdy"); System.out.println(q); // howdy String qq = upcase(q); Syste

算法-java有1234个数字能组成多少个有两个重复的3位数字

问题描述 java有1234个数字能组成多少个有两个重复的3位数字 java有1234四数字能组成多少个有两个重复的3位数字,java有1234四数字能组成多少个有两个重复的3位数字,java有1234四数字能组成多少个有两个重复的3位数字 解决方案 2 6*C 1234 解决方案二: 6*C下面是1234,上面是2 解决方案三: 如果我没理解错你的意思,那么这题是一个从四个数字中选出两个进行三位数字的排列组合的问题.根据大学(还是高中?)的排列组合知识就是: C2/4 乘以 3 =36种,具体

返回字串的拼音首字母

拼音 //////////////////////////////////////////////////////////////file://函数名:gf_getfirstletter(string)file://功能:返回字串的拼音首字母,支持混合字符串(可以包含非汉字)file://参数:as_inputstringfile://返回值:stringfile://created 大同 张和平 dtzhp@yeah.net///////////////////////////////////

io流-JAVA怎么从特定【行】开始读字串?

问题描述 JAVA怎么从特定[行]开始读字串? 就是JAVA随机读,不是按byte定位,按行数定位,最好还能获取该文件所有的行数,然后多线程split读取 解决方案 按行,你首先就要先找到对应的行,然后完成读Java 对文件的操作,你可以采用最基本的:一个字节一个字节读,然后判回车换行符,完成一行的读取.循环以上步骤,直到读到你想要行的数据. 解决方案二: 随机读写可以通过java.io.RandomAccessFile类.但是 你要按 行 读取,能不能 先做下预处理 记录下行. 解决方案三:

关于java问题-切割字串的問題(java)

问题描述 切割字串的問題(java) 我想要做一個切token的程式, 請問要怎麼用java切割字串? 如果我想跟hash要怎麼做? 解决方案 用string.split函式.你可以指定分割符或者用正则表达式来分割."跟hash"不知道你说的是什么意思.http://www.cnblogs.com/mingforyou/archive/2013/09/03/3299569.html 解决方案二: 难道是港澳台的同胞么?繁体字. 问题没有描述太清楚 解决方案三: 字串问题

【算法趣题】产生随机DNA序列(字串)

[题目说明]写一段程序(不限语言),能够按要求产生随机DNA序列(字串). DNA序列由A.T.C.G四种碱基(字符)组成.现要求按A 10%, T 20%, C 30%, G 40% 的比例产生长度为100个碱基的DNA序列. 注意要随机程度好,且符合比例要求. 我先抛砖引玉了:(大家最好先别看我的程序,否则可能会影响你自己的思路) 以下是HTML网页特效代码,点击运行按钮可查看效果: [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

java MD5加密实现代码_java

先从下面这张图对MD5加密实现进行了解,具体如下 package com.pb; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Scanner; /* * 验证MD5 * 1.初始化MessageDigest信息摘要对象 * 2.传入需要计算的字符串更新摘