这篇文章主要介绍了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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。