MD5加密


package com.evangelsoft.crosslink.jxnetshop.config.types;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.security.MessageDigest;

public class GetMD5 {

static char hexdigits[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

/**
* @param args
*/
public static void main(String[] args) {
System.out.println(getMD5(new File("C:/Users/Administrator/Desktop/20110322132716005.PNG")));
System.out.println(getHttpMD5("http://image.jx958.com/product_image/clothing/2011/4/19/20110322132716005.PNG"));
}
/**
* 对文件全文生成MD5摘要
* @param file 要加密的文件
* @return MD5 摘要
*/
public static String getMD5(File file){
FileInputStream fis = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
fis = new FileInputStream(file);
byte[] buffer = new byte[2048];
int length = -1;
@SuppressWarnings("unused")
long s = System.currentTimeMillis();
while((length = fis.read(buffer)) != -1){
md.update(buffer, 0 ,length);
}
byte[] b = md.digest();
return byteToHexString(b);
} catch (Exception e) {
e.printStackTrace();
return null;
}finally{
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}


/**
* 对URL文件全文生成MD5摘要
* @param file 要加密的文件
* @return MD5 摘要
*/
public static String getHttpMD5(String addr){
InputStream fis = null;
MessageDigest md;
try {
md = MessageDigest.getInstance("MD5");
URL url = new URL(addr);
URLConnection c = url.openConnection(); // *
c.connect(); // *
// 显示该连接的相关信息,这些都是URLConnection的方法

fis = c.getInputStream();
byte[] buffer = new byte[2048];
int length = -1;
@SuppressWarnings("unused")
long s = System.currentTimeMillis();
while ((length = fis.read(buffer)) != -1) {
md.update(buffer, 0, length);
}
byte[] b = md.digest();
return byteToHexString(b);
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* 把byte[] 数组转换成十六进制字符串表示形式
* @param tmp 要转换的byte[]
* @return 十六进制字符串表示形式
*/
private static String byteToHexString(byte[] tmp){
String s;
//用字节表示就是16个字节
char str[] = new char[16*2];//每个字节用16进制表示的话,使用两个字符
//所表示成16进制需要32个字符
int k = 0 ; //表示转换结果中对应的字符位置
for(int i = 0 ; i< 16 ; i++){//从第一个字节开始,对MD5的每一个字节
//转换成 16进制字符的转换
byte byte0 = tmp[i]; //取第i个字节
str[k++] = hexdigits[byte0 >>> 4 & 0xf];//取字节中高4位的数字转换,>>>为逻辑右移,将符号位一起右移
//取符号中低4位的数字转换
str[k++] = hexdigits[byte0 & 0xf];
}
s = new String(str);//换后的结果转换为字符串
return s;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值