- packagecom.md5.util;
- importjava.io.File;
- importjava.io.FileInputStream;
- importjava.io.IOException;
- importjava.nio.ByteBuffer;
- importjava.nio.channels.FileChannel;
- importjava.security.MessageDigest;
- importjava.security.NoSuchAlgorithmException;
- importcom.md5.Constants;
- /**
- *MD5工具类,提供字符串MD5加密(校验)、文件MD5值获取(校验)功能。\
- */
- publicclassMD5Util{
- /**
- *16进制字符集
- */
- privatestaticfinalcharHEX_DIGITS[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D',
- 'E','F'};
- /**
- *
- *指定算法为MD5的MessageDigest
- */
- privatestaticMessageDigestmessageDigest=null;
- /**
- *
- *初始化messageDigest的加密算法为MD5
- */
- static{
- try{
- messageDigest=MessageDigest.getInstance("MD5");
- }catch(NoSuchAlgorithmExceptione){
- e.printStackTrace();
- }
- }
- /**
- *获取文件的MD5值
- *
- *@paramfile
- *目标文件
- *@returnMD5字符串
- */
- publicstaticStringgetFileMD5String(Filefile){
- Stringret="";
- FileInputStreamin=null;
- FileChannelch=null;
- try{
- in=newFileInputStream(file);
- ch=in.getChannel();
- ByteBufferbyteBuffer=ch.map(FileChannel.MapMode.READ_ONLY,0,file.length());
- messageDigest.update(byteBuffer);
- ret=bytesToHex(messageDigest.digest());
- }catch(IOExceptione){
- e.printStackTrace();
- }finally{
- if(in!=null){
- try{
- in.close();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- if(ch!=null){
- try{
- ch.close();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- }
- returnret;
- }
- /**
- *获取文件的MD5值
- *@paramfileName目标文件的完整名称
- *@returnMD5字符串
- */
- publicstaticStringgetFileMD5String(StringfileName){
- returngetFileMD5String(newFile(fileName));
- }
- /**
- *MD5加密字符串
- *@paramstr目标字符串
- *@returnMD5加密后的字符串
- */
- publicstaticStringgetMD5String(Stringstr){
- returngetMD5String(str.getBytes());
- }
- /**
- *MD5加密以byte数组表示的字符串
- *@parambytes目标byte数组
- *@returnMD5加密后的字符串
- */
- publicstaticStringgetMD5String(byte[]bytes){
- messageDigest.update(bytes);
- returnbytesToHex(messageDigest.digest());
- }
- /**
- *校验密码与其MD5是否一致
- *@parampwd密码字符串
- *@parammd5基准MD5值
- *@return检验结果
- */
- publicstaticbooleancheckPassword(Stringpwd,Stringmd5){
- returngetMD5String(pwd).equalsIgnoreCase(md5);
- }
- /**
- *校验密码与其MD5是否一致
- *
- *@parampwd以字符数组表示的密码
- *@parammd5基准MD5值
- *@return检验结果
- */
- publicstaticbooleancheckPassword(char[]pwd,Stringmd5){
- returncheckPassword(newString(pwd),md5);
- }
- /**
- *检验文件的MD5值
- *@paramfile目标文件
- *@parammd5基准MD5值
- *@return检验结果
- */
- publicstaticbooleancheckFileMD5(Filefile,Stringmd5){
- returngetFileMD5String(file).equalsIgnoreCase(md5);
- }
- /**
- *检验文件的MD5值
- *@paramfileName目标文件的完整名称
- *@parammd5基准MD5值
- *@return检验结果
- */
- publicstaticbooleancheckFileMD5(StringfileName,Stringmd5){
- returncheckFileMD5(newFile(fileName),md5);
- }
- /**
- *将字节数组转换成16进制字符串
- *@parambytes目标字节数组
- *@return转换结果
- */
- publicstaticStringbytesToHex(bytebytes[]){
- returnbytesToHex(bytes,0,bytes.length);
- }
- /**
- *将字节数组中指定区间的子数组转换成16进制字符串
- *
- *@parambytes
- *目标字节数组
- *@paramstart
- *起始位置(包括该位置)
- *@paramend
- *结束位置(不包括该位置)
- *@return转换结果
- */
- publicstaticStringbytesToHex(bytebytes[],intstart,intend){
- StringBuildersb=newStringBuilder();
- for(inti=start;i<start+end;i++){
- sb.append(byteToHex(bytes[i]));
- }
- returnsb.toString();
- }
- /**
- *将单个字节码转换成16进制字符串
- *@parambt目标字节
- *@return转换结果
- */
- publicstaticStringbyteToHex(bytebt){
- returnHEX_DIGITS[(bt&0xf0)>>4]+""+HEX_DIGITS[bt&0xf];
- }
- publicstaticvoidmain(String[]args)throwsIOException{
- //longbegin=System.currentTimeMillis();
- //Stringmd5=getFileMD5String(newFile("F://aaa.rar"));
- //longend=System.currentTimeMillis();
- //System.out.println("MD5:\t"+md5+"\nTime:\t"+(end-begin)+
- //"ms");
- System.out.println(getMD5String("123456abcd"+Constants.SALT_VALUE));
- }
- }
MD5加密
最新推荐文章于 2024-10-06 20:16:20 发布