,,详解JAVA中获取文件MD5值的四种方法

,,详解JAVA中获取文件MD5值的四种方法

这篇文章主要介绍了Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)中获取文件讯息摘要5值的四种方法,获取文件讯息摘要5值主要分为三个步骤,第一步获取文件的字节信息,第二步通过消息摘要类进行讯息摘要5加密,第三步转换成16进制的讯息摘要5码值,需要的朋友可以参考下

Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)中获取文件讯息摘要5值的四种方法其实都很类似,因为核心都是通过Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)自带的消息摘要类来实现。获取文件讯息摘要5值主要分为三个步骤,第一步获取文件的字节信息,第二步通过消息摘要类进行讯息摘要5加密,第三步转换成16进制的讯息摘要5码值。几种方法的不同点主要在第一步和第三步上。具体可以看下面的例子:

方法一、

私人决赛静态字符串[] strHex={ '0 ',' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',

6 ',' 7 ',' 8 ',' 9 ',' a ',' b ',' c ',' d ',' e ',' f ' };

公共静态字符串getMD5One(字符串路径){

字符串缓冲区sb=新字符串缓冲区();

尝试{

消息摘要MD=消息摘要。getinstance(' MD5 ');

byte[]b=MD . digest(fileutils。readfiletobytearray(新文件(路径)));

for(int I=0;长度;i ) {

int d=b[I];

if (d 0) {

d=256

}

int D1=d/16;

int d2=d % 16

某人(somebody的简写)append(strHex[D1]strHex[D2]);

}

} catch(nosuch算法异常e){

e。printstacktrace();

} catch (IOException e) {

e。printstacktrace();

}

归还某人。tostring();

}

方法一是比较原始的一种实现方法,首先将文件一次性读入内存,然后通过消息摘要进行讯息摘要5加密,最后再手动将其转换为16进制的讯息摘要5值。

方法二、

公共静态字符串getMD5Two(字符串路径){

string buffer sb=新字符串缓冲区(');

尝试{

消息摘要MD=消息摘要。getinstance(' MD5 ');

MD . update(fileutils。readfiletobytearray(新文件(路径)));

byte b[]=MD . digest();

int d;

for(int I=0;长度;i ) {

d=b[I];

if (d 0) {

d=b[I]0x ff;

//与上一行效果等同

//I=256;

}

如果(草16)

某人(somebody的简写)追加(“0”);

某人(somebody的简写)追加(整数。tohexstring(d));

}

} catch(nosuch算法异常e){

e。printstacktrace();

} catch (IOException e) {

e。printstacktrace();

}

归还某人。tostring();

}

方法二与方法一不同的地方主要是在步骤三,这里借助了整数类的方法实现16进制的转换,比方法一更简洁一些PS:JAVA .中字节是有负数的,代码中0xff的操作与计算机中数据存储的原理有关,即负数存储的是二进制的补码,有兴趣的童鞋可以挖一下,这里不展开说。

方法三、

公共静态字符串getMD5Three(字符串路径){

大整数bi=空

尝试{

字节[]缓冲区=新字节[8192];

int len=0;

消息摘要MD=消息摘要。getinstance(' MD5 ');

文件f=新文件(路径);

文件输入流fis=新文件输入流(f);

while ((len=fis.read(buffer))!=-1) {

md.update(buffer,0,len);

}

fis。close();

byte[]b=MD . digest();

bi=new BigInteger(1,b);

} catch(nosuch算法异常e){

e。printstacktrace();

} catch (IOException e) {

e。printstacktrace();

}

返回毕。tostring(16);

}

与前两种方法相比,第三种方法在读取文件信息方面稍有不同。在这里,一个文件被多次读入。对于大文件,建议使用这种方法,它占用的内存较少。第三步,通过BigInteger类提供的方法进行十六进制转换,类似于第二种方法。

方法四、

DigestUtils.md5Hex(新文件输入流(路径));

第四种方法应该是最方便的,哈哈。好的东西应该留在最后。如果只需要使用标准的MD5,其实一行代码就够了。JAVA附带的commons-codec包提供了一种获取十六进制MD5值的方法。在它的底层实现中,它也多次读取一个文件,类似于第三种方法。所以性能也不错。

总结:其实方法都差不多。推荐第四种方法,简洁,性能好。当然,如果想做一些调整什么的,可以根据自己的需求来选择方法。

PS:其实还有一个关键点,就是你怎么知道自己生成的MD5值是否正确?

方法有很多。其实有一个很简单的方法,不需要安装任何额外的软件。只需使用windows自带的命令:certutil-hashfile[文件路径] MD5。示例如下:

关于JAVA中获取文件MD5值的四种方法的文章到此结束。关于用java获取文件的MD5值的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: