zoukankan      html  css  js  c++  java
  • 一致性hash 之 MD5hash算法

    这里面提出了一个常见的错误,要注意 

    http://www.bpsky.net/t/android%20md5%20%E5%8A%A0%E5%AF%86%E5%AD%97%E7%AC%A6%E4%B8%B2.html

    Java MD5 Hashing Example

    MD5 is one in a series of message digest algorithms designed by Professor Ronald Rivest of MIT (Rivest, 1994). When analytic work indicated that MD5′s predecessor MD4 was likely to be insecure, MD5 was designed in 1991 to be a secure replacement. (Weaknesses were indeed later found in MD4 by Hans Dobbertin.)

    MD5 is a widely used hashing algorithm in many companies and industries, here are two examples for the MD5 implementation.

    1. File checksum with MD5

    It will use MD5 hashing algorithm to generate a checksum for file “c:\\loging.log”.

    package com.mkyong.test;
     
    import java.io.FileInputStream;
    import java.security.MessageDigest;
     
    public class MD5CheckSumExample 
    {
        public static void main(String[] args)throws Exception
        {
            MessageDigest md = MessageDigest.getInstance("MD5");
            FileInputStream fis = new FileInputStream("c:\\loging.log");
     
            byte[] dataBytes = new byte[1024];
     
            int nread = 0; 
            while ((nread = fis.read(dataBytes)) != -1) {
              md.update(dataBytes, 0, nread);
            };
            byte[] mdbytes = md.digest();
     
            //convert the byte to hex format method 1
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < mdbytes.length; i++) {
              sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
            }
     
            System.out.println("Digest(in hex format):: " + sb.toString());
     
            //convert the byte to hex format method 2
            StringBuffer hexString = new StringBuffer();
        	for (int i=0;i<mdbytes.length;i++) {
        		String hex=Integer.toHexString(0xff & mdbytes[i]);
       	     	if(hex.length()==1) hexString.append('0');
       	     	hexString.append(hex);
        	}
        	System.out.println("Digest(in hex format):: " + hexString.toString());
        }
    }
    Output
     
    Digest(in hex format):: e72c504dc16c8fcd2fe8c74bb492affa
    Digest(in hex format):: e72c504dc16c8fcd2fe8c74bb492affa

    2. Hashing String with MD5

    It will use MD5 hashing algorithm to generate a hash value for a password “123456″.

    package com.mkyong.test;
     
    import java.security.MessageDigest;
     
    public class MD5HashingExample 
    {
        public static void main(String[] args)throws Exception
        {
        	String password = "123456";
     
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(password.getBytes());
     
            byte byteData[] = md.digest();
     
            //convert the byte to hex format method 1
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < byteData.length; i++) {
             sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
            }
     
            System.out.println("Digest(in hex format):: " + sb.toString());
     
            //convert the byte to hex format method 2
            StringBuffer hexString = new StringBuffer();
        	for (int i=0;i<byteData.length;i++) {
        		String hex=Integer.toHexString(0xff & byteData[i]);
       	     	if(hex.length()==1) hexString.append('0');
       	     	hexString.append(hex);
        	}
        	System.out.println("Digest(in hex format):: " + hexString.toString());
        }
    }
    Output
    Digest(in hex format):: e10adc3949ba59abbe56e057f20f883e
    Digest(in hex format):: e10adc3949ba59abbe56e057f20f883e

    Reference

    1. http://en.wikipedia.org/wiki/MD5
    2. http://forums.sun.com/thread.jspa?threadID=5169003

  • 相关阅读:
    第六节:流上下文
    第五节:控制序列化和反序列化的数据
    第四节:格式化器如何序列化类型实例
    第三节:控制序列化和反序列化
    第二节:使类型可序列化
    第一节:序列化和反序列化快速入门
    第五节:使用反射发现类型成员
    golang 一些坑 rang
    golang json格式字符串反序列化映射到切片结构体
    golang 结构体内嵌结构体序列化填充
  • 原文地址:https://www.cnblogs.com/xuxm2007/p/2156020.html
Copyright © 2011-2022 走看看