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