欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#与Java的MD5简单验证(实例代码)

程序员文章站 2022-07-02 22:06:32
c#端 using system; using system.io; using system.security.cryptography; names...

c#端

using system;
using system.io;
using system.security.cryptography;

namespace 计算文件的md5值
{
  class md5_helper
  {
    /// <summary>
    /// 文件md5校验
    /// </summary>
    /// <param name="pathname">文件绝对路径</param>
    /// <returns>md5校验码</returns>
    public string getmd5hash(string pathname)
    {
      string strresult = "";
      string strhashdata = "";
      byte[] arrbythashvalue;
      filestream ofilestream = null;
      md5cryptoserviceprovider omd5hasher =
            new md5cryptoserviceprovider();
      try
      {
        ofilestream = new filestream(pathname, filemode.open, fileaccess.read, fileshare.readwrite);
        arrbythashvalue = omd5hasher.computehash(ofilestream);//计算指定stream 对象的哈希值
        ofilestream.close();
        //由以连字符分隔的十六进制对构成的string,其中每一对表示value 中对应的元素;例如“f-2c-4a”
        strhashdata = bitconverter.tostring(arrbythashvalue);
        //替换-
        strhashdata = strhashdata.replace("-", "");
        strresult = strhashdata;
      }
      catch (system.exception ex)
      {

      }
      return strresult;

    }

    /// <summary>
    /// 字节数组校验
    /// </summary>
    /// <param name="buffer">待字节数组</param>
    /// <returns>md5校验码</returns>
    public string getmd5hash(byte[] buffer)
    {
      string strresult = "";
      string strhashdata = "";
      byte[] arrbythashvalue;
      md5cryptoserviceprovider omd5hasher =
            new md5cryptoserviceprovider();
      try
      {
        arrbythashvalue = omd5hasher.computehash(buffer);//计算指定stream 对象的哈希值
        //由以连字符分隔的十六进制对构成的string,其中每一对表示value 中对应的元素;例如“f-2c-4a”
        strhashdata = bitconverter.tostring(arrbythashvalue);
        //替换-
        strhashdata = strhashdata.replace("-", "");
        strresult = strhashdata;
      }
      catch(system.exception ex)
      {

      }
      return strresult;

    }
  }
}

java端

package com;
import java.io.file;
import java.io.fileinputstream;
import java.io.ioexception;
import java.io.inputstream;
import java.security.messagedigest;
import java.security.nosuchalgorithmexception;

public class md5util {
	/**
	 * 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合
	 */
	protected static char hexdigits[] = { '0', '1', '2', '3', '4', '5', '6','7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
	protected static messagedigest messagedigest = null;
	static {
		try {
			messagedigest = messagedigest.getinstance("md5");
		} catch (nosuchalgorithmexception e) {
			e.printstacktrace();
		}
	}

	public static void main(string[] args) throws ioexception {

		byte[] buffer= "helloworld".getbytes();//字节数组校验
		string md55 = getfilemd5string(buffer);
		system.out.println("md55:" + md55);
	}
	

	public static string getfilemd5string(file file) throws ioexception {
		inputstream fis;
		fis = new fileinputstream(file);
		byte[] buffer = new byte[1024];
		int numread = 0;
		while ((numread = fis.read(buffer)) > 0) {
			messagedigest.update(buffer, 0, numread);
		}
		fis.close();
		return buffertohex(messagedigest.digest());
	}
	
	public static string getfilemd5string(byte[] buffer) throws ioexception {
			messagedigest.update(buffer, 0, buffer.length);
		return buffertohex(messagedigest.digest());
	}

	private static string buffertohex(byte bytes[]) {
		return buffertohex(bytes, 0, bytes.length);
	}

	private static string buffertohex(byte bytes[], int m, int n) {
		stringbuffer stringbuffer = new stringbuffer(2 * n);
		int k = m + n;
		for (int l = m; l < k; l++) {
			appendhexpair(bytes[l], stringbuffer);
		}
		return stringbuffer.tostring();
	}

	private static void appendhexpair(byte bt, stringbuffer stringbuffer) {
		char c0 = hexdigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换
		// 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同
		char c1 = hexdigits[bt & 0xf];// 取字节中低 4 位的数字转换
		stringbuffer.append(c0);
		stringbuffer.append(c1);
	}
} 


以上就是小编为大家带来的c#与java的md5简单验证(实例代码)的全部内容了,希望对大家有所帮助,多多支持~