1. 如何使用java生成MD5代码
这是我以前做的一个小项目时用到md5写的
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
//将用户密码进行md5加密 并返回加密后的32位十六进制密码
public class MD5Util {
public static String md5(String password) {
try {
// 获取md5对象
MessageDigest md = MessageDigest.getInstance("md5");
// 获取加密后的密码并返回十进制字节数组
byte[] bytes = md.digest(password.getBytes());
// 遍历数组得到每个十进制数并转换成十六进制
StringBuffer sb = new StringBuffer();
for (byte b : bytes) {
// 把每个数转成十六进制 存进字符中
sb.append(toHex(b));
}
String finish = sb.toString();
return finish;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
// 十进制转十六进制方法
private static String toHex(byte b) {
int target = 0;
if (b < 0) {
target = 255 + b;
} else {
target = b;
}
int first = target / 16;
int second = target % 16;
return Hex[first] + Hex[second];
}
static String[] Hex = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"a", "b", "c", "d", "e", "f" };
/*public static void main(String[] args) {
String a = MD5Util.md5("1234");
System.out.println(a);
}*/
}
2. java 有哪些jar包直接提供了获得md5值的方法
需要导入一个jar包:commons-codec
代码如下:
import org.apache.commons.codec.digest.DigestUtils;
public class ToMain {
public static void main(String[] args) {
System.out.println(DigestUtils.md5Hex(".com"));
}
}
3. 如何将java文件内容进行比较
比较文件的MD5即可
import java.io.File;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;
public class FileDigest {
/**
* 获取单个文件的MD5值!
* @param file
* @return
*/
public static String getFileMD5(File file) {
if (!file.isFile()){
return null;
}
MessageDigest digest = null;
FileInputStream in=null;
byte buffer[] = new byte[1024];
int len;
try {
digest = MessageDigest.getInstance("MD5");
in = new FileInputStream(file);
while ((len = in.read(buffer, 0, 1024)) != -1) {
digest.update(buffer, 0, len);
}
in.close();
} catch (Exception e) {
e.printStackTrace();
return null;
}
BigInteger bigInt = new BigInteger(1, digest.digest());
return bigInt.toString(16);
}
/**
* 获取文件夹中文件的MD5值
* @param file
* @param listChild ;true递归子目录中的文件
* @return
*/
public static Map<String, String> getDirMD5(File file,boolean listChild) {
if(!file.isDirectory()){
return null;
}
//<filepath,md5>
Map<String, String> map=new HashMap<String, String>();
String md5;
File files[]=file.listFiles();
for(int i=0;i<files.length;i++){
File f=files[i];
if(f.isDirectory()&&listChild){
map.putAll(getDirMD5(f, listChild));
} else {
md5=getFileMD5(f);
if(md5!=null){
map.put(f.getPath(), md5);
}
}
}
return map;
}
public static void main(String[] args) {
File file1 = new File("a.txt");
File file2 = new File("b.txt");
System.out.println(getFileMD5(file1).equals(getFileMD5(file2)));
}
}
4. java 算文件的MD5值是怎么用十六进制表示的
&这个是位运算“且”
sb.append(hexChar[(b[i] & 0xf0) >>> 4]);
//(b[i] & 0xf0)这个意思就是取b[i]的后4位
“>>> 无符号右移”
sb.append(hexChar[b[i] & 0x0f]);
//这个意思就是取b[i]的前4位
5. java 获取1G文件md5 要多久
我使用了部分取值的方式来提高MD5的计算速度,这样的时候,时间主要耗费在了IO中。如果是100K(换成500K也并没有提高执行的速度)取一个字符计算大约10秒以内。但是如果全部读取可能要60秒或者更多。对于大文件建议使用一些文件相关信息和部分文件内容做MD5.比如用文件长度和一定间隔取一些字节。
6. Java,如何获取文件的MD5值
package cdm;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigInteger;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import org.apache.commons.codec.digest.*;
import org.apache.commons.io.IOUtils;
public class testMD5 {
public static String getMd5ByFile(File file) throws FileNotFoundException {
String value = null;
FileInputStream in = new FileInputStream(file);
try {
MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(byteBuffer);
BigInteger bi = new BigInteger(1, md5.digest());
value = bi.toString(16);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return value;
}
public static void main(String[] args) throws IOException {
String path="E:\文件.zip";
String v = getMd5ByFile(new File(path));
System.out.println("MD5:"+v.toUpperCase());
FileInputStream fis= new FileInputStream(path);
String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fis));
IOUtils.closeQuietly(fis);
System.out.println("MD5:"+md5);
//System.out.println("MD5:"+DigestUtils.md5Hex("WANGQIUYUN"));
}
}
7. java多个文件怎么生成一个md5
这里定义了一些基本的变量与静态对象,并指定采用的方式是“md5“,下张图为定义了一个方法,方法的参数是接收一个文件File对象,并且返回该文件生成的”md5“值。
这里定义了一个转化方法,把文件或文件流以字节的方式进行转换,使之生成唯一的md5,此方法间接的应用到了md5的生成中。
这里主要定义了一个根据提供的文件流输入流InputStream进行生成md5的值,如上几幅图中的代码加在一起就是完整的文件或文件流的md5值生成方法。
4
最后一张图片为最终生成后的效果,文件上传的时候可以先生成md5的值后到数据库中进行查找,如果找到了就说明相同的文件已经存在,那么就不应该再保存了,否则会出现相同的冗余文件。