【发布时间】:2011-05-21 19:11:46
【问题描述】:
我有以下代码块可以正常工作:
<%@page import="java.util.*" %>
<%@page import="java.security.*" %>
<%
String str = "A string to hash.";
MessageDigest md = MessageDigest.getInstance("MD5");
md.update( str.getBytes() );
byte[] digest = md.digest();
StringBuffer hexString = new StringBuffer();
for (int i = 0, j = digest.length; i < j; i++) {
String tmp = Integer.toHexString(0xFF & digest[i]);
if (tmp.length() < 2) {
tmp = "0" + tmp;
}
hexString.append(tmp);
}
out.println(hexString.toString());
%>
当我试图将散列代码分解为一个方法时,在定义 MessageDigest 对象时出现“NoSuchAlgorithmException”错误:
<%@page import="java.util.*" %>
<%@page import="java.security.*" %>
<%
String str = "A string to hash";
String md5string = md5hash(str);
out.println(md5string);
%>
<%!
public String md5hash(String str) {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update( str.getBytes() );
byte[] digest = md.digest();
StringBuffer hexString = new StringBuffer();
for (int i = 0, j = digest.length; i < j; i++) {
String tmp = Integer.toHexString(0xFF & digest[i]);
if (tmp.length() < 2) {
tmp = "0" + tmp;
}
hexString.append(tmp);
}
return hexString.toString();
}
%>
要编译 JSP,我必须像这样修改它:
<%@page import="java.util.*" %>
<%@page import="java.security.*" %>
<%
String str = "A string to hash";
String md5string = md5hash(str);
out.println(md5string);
%>
<%!
public String md5hash(String str) {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {}
md.update( str.getBytes() );
byte[] digest = md.digest();
StringBuffer hexString = new StringBuffer();
for (int i = 0, j = digest.length; i < j; i++) {
String tmp = Integer.toHexString(0xFF & digest[i]);
if (tmp.length() < 2) {
tmp = "0" + tmp;
}
hexString.append(tmp);
}
return hexString.toString();
}
%>
为什么我必须添加一个无用的 try/catch 才能使这段代码工作?
【问题讨论】: