好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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简单验证(实例代码)的全部内容了,希望对大家有所帮助,多多支持服务器之家~

dy("nrwz");

查看更多关于C#与Java的MD5简单验证(实例代码)的详细内容...

  阅读:53次