如何使用java实现md5 MessageDigest md = MessageDigest.getInstance("MD5");md.update(buff);byte[] result = md.digest();再将这个result每字节tohex就可以了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 java.security.MessageDigest.getInstance("MD5").digest(byte[]/*文件内容*/) 上面说得我知道,可是,我用下面的语句并不行。FileInputStream inp = new FileInputStream(new File(fileName));md.update(inp);如何,将文件的内容放到update()中呢?谢谢各位了 byte[] content=new byte[inp.available()];inp.readFully(content);byte[] result=md5.digest(content); 谢谢,可以了。public static void main(String[] args) { byte cResult[] = new byte[16]; String sResult = ""; try { String fileName = "c:/arcldr.exe"; FileInputStream inp = new FileInputStream(new File(fileName)); BufferedReader in = new BufferedReader(new FileReader(fileName)); MessageDigest md = MessageDigest.getInstance("MD5"); byte[] content=new byte[inp.available()]; inp.read(content); md.update(content); cResult = md.digest(); for (int i = 0; i < cResult.length; i++) { if (cResult[i] < 0) cResult[i] += 128; String sTemp = Integer.toHexString(cResult[i]).toUpperCase(); if (cResult[i] < 16) sTemp = "0" + sTemp; sResult += sTemp; } } catch (Exception e) { sResult = ""; } System.out.println(sResult); 我把你这个程序运行了一下,对同一程序得到的值跟 WinMd5 V1.0 得到的值不一样啊.你的: 2B4C7F55203C1F2C631223692C14732CWinMd5:2b4cffd5a0bc1f2ce31223692c14f32c 这一段的问题for (int i = 0; i < cResult.length; i++) { if (cResult[i] < 0) cResult[i] += 128; String sTemp = Integer.toHexString(cResult[i]).toUpperCase(); if (cResult[i] < 16) sTemp = "0 " + sTemp; sResult += sTemp; } 用这个方法把byte转十六进制就OK了. /** * byte转换为十六进制 * @param b byte * @return String */ public static String byte2Hex(byte b) { return ("" + "0123456789ABCDEF".charAt(0xf & b >> 4) + "0123456789ABCDEF".charAt(b & 0xf)); } JSP中使用JS输出提示问题 就没个好心人帮帮忙吗?急啊!在线等! 在一堆复选框中。怎么用一个方法获取已选中的复选框? 关于url重定向 招 Java 程序员 hibernate 有没有办法得到当前数据库的 Dialect? EJB推荐一本电子书吧 struts 的下拉列表框问题 关于在jb9里配置ejb的问题,大家多帮忙把! 在线等! 微信公众号的文章阅读量!!!!!! Spring,Hibernate,EJB复习题 hibernate升级问题!
FileInputStream inp = new FileInputStream(new File(fileName));
md.update(inp);如何,将文件的内容放到update()中呢?
谢谢各位了
inp.readFully(content);
byte[] result=md5.digest(content);
public static void main(String[] args) {
byte cResult[] = new byte[16];
String sResult = "";
try {
String fileName = "c:/arcldr.exe";
FileInputStream inp = new FileInputStream(new File(fileName));
BufferedReader in = new BufferedReader(new FileReader(fileName));
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] content=new byte[inp.available()];
inp.read(content);
md.update(content);
cResult = md.digest(); for (int i = 0; i < cResult.length; i++) {
if (cResult[i] < 0)
cResult[i] += 128;
String sTemp = Integer.toHexString(cResult[i]).toUpperCase();
if (cResult[i] < 16)
sTemp = "0" + sTemp;
sResult += sTemp;
}
}
catch (Exception e) {
sResult = "";
}
System.out.println(sResult);
WinMd5 V1.0 得到的值不一样啊.
你的: 2B4C7F55203C1F2C631223692C14732C
WinMd5:2b4cffd5a0bc1f2ce31223692c14f32c
for (int i = 0; i < cResult.length; i++) {
if (cResult[i] < 0)
cResult[i] += 128;
String sTemp = Integer.toHexString(cResult[i]).toUpperCase();
if (cResult[i] < 16)
sTemp = "0 " + sTemp;
sResult += sTemp;
}
用这个方法把byte转十六进制就OK了.
/**
* byte转换为十六进制
* @param b byte
* @return String
*/
public static String byte2Hex(byte b) {
return ("" + "0123456789ABCDEF".charAt(0xf & b >> 4) +
"0123456789ABCDEF".charAt(b & 0xf));
}