C#与Java的MD5简单验证(实例代码)
C#端
usingSystem; usingSystem.IO; usingSystem.Security.Cryptography; namespace计算文件的MD5值 { classMD5_Helper { ///<summary> ///文件MD5校验 ///</summary> ///<paramname="pathName">文件绝对路径</param> ///<returns>MD5校验码</returns> publicstringgetMD5Hash(stringpathName) { stringstrResult=""; stringstrHashData=""; byte[]arrbytHashValue; FileStreamoFileStream=null; MD5CryptoServiceProvideroMD5Hasher= newMD5CryptoServiceProvider(); try { oFileStream=newFileStream(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.Exceptionex) { } returnstrResult; } ///<summary> ///字节数组校验 ///</summary> ///<paramname="buffer">待字节数组</param> ///<returns>MD5校验码</returns> publicstringgetMD5Hash(byte[]buffer) { stringstrResult=""; stringstrHashData=""; byte[]arrbytHashValue; MD5CryptoServiceProvideroMD5Hasher= newMD5CryptoServiceProvider(); try { arrbytHashValue=oMD5Hasher.ComputeHash(buffer);//计算指定Stream对象的哈希值 //由以连字符分隔的十六进制对构成的String,其中每一对表示value中对应的元素;例如“F-2C-4A” strHashData=BitConverter.ToString(arrbytHashValue); //替换- strHashData=strHashData.Replace("-",""); strResult=strHashData; } catch(System.Exceptionex) { } returnstrResult; } } }
Java端
packagecom; importjava.io.File; importjava.io.FileInputStream; importjava.io.IOException; importjava.io.InputStream; importjava.security.MessageDigest; importjava.security.NoSuchAlgorithmException; publicclassMD5Util{ /** *默认的密码字符串组合,用来将字节转换成16进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合 */ protectedstaticcharhexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; protectedstaticMessageDigestmessagedigest=null; static{ try{ messagedigest=MessageDigest.getInstance("MD5"); }catch(NoSuchAlgorithmExceptione){ e.printStackTrace(); } } publicstaticvoidmain(String[]args)throwsIOException{ byte[]buffer="HelloWorld".getBytes();//字节数组校验 Stringmd55=getFileMD5String(buffer); System.out.println("md55:"+md55); } publicstaticStringgetFileMD5String(Filefile)throwsIOException{ InputStreamfis; fis=newFileInputStream(file); byte[]buffer=newbyte[1024]; intnumRead=0; while((numRead=fis.read(buffer))>0){ messagedigest.update(buffer,0,numRead); } fis.close(); returnbufferToHex(messagedigest.digest()); } publicstaticStringgetFileMD5String(byte[]buffer)throwsIOException{ messagedigest.update(buffer,0,buffer.length); returnbufferToHex(messagedigest.digest()); } privatestaticStringbufferToHex(bytebytes[]){ returnbufferToHex(bytes,0,bytes.length); } privatestaticStringbufferToHex(bytebytes[],intm,intn){ StringBufferstringbuffer=newStringBuffer(2*n); intk=m+n; for(intl=m;l<k;l++){ appendHexPair(bytes[l],stringbuffer); } returnstringbuffer.toString(); } privatestaticvoidappendHexPair(bytebt,StringBufferstringbuffer){ charc0=hexDigits[(bt&0xf0)>>4];//取字节中高4位的数字转换 //为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同 charc1=hexDigits[bt&0xf];//取字节中低4位的数字转换 stringbuffer.append(c0); stringbuffer.append(c1); } }
以上就是小编为大家带来的C#与Java的MD5简单验证(实例代码)的全部内容了,希望对大家有所帮助,多多支持毛票票~