Link to home
Start Free TrialLog in
Avatar of Mark
Mark

asked on

noSuchAlgorithmException in jsp subroutine. Why?

I am trying to make a routine that encrypts. I found some code that works. When I put the following in-line in my jsp page, it works fine:

     String pw = "mypassword";
     java.security.MessageDigest d =null;
     d = java.security.MessageDigest.getInstance("SHA-1");
     d.reset();
     d.update(pw.getBytes());

However, I want to make it a function I can call. I've done this before by including code, but this time I'm having trouble. In my main jsp page I have:

<%@ include file="include/crypt.inc"%>

and in include/crypt.inc I have:

<%!
private byte[] pwCrypt(String pw)
{
     java.security.MessageDigest d =null;
     d = java.security.MessageDigest.getInstance("SHA-1");
     d.reset();
     d.update(pw.getBytes());
     return  d.digest();
}
%>

However, when I attempt to load the jsp page I get the following error, even if I don't try to call pwCrypt():

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 5 in the jsp file: /include/crypt.inc
Unhandled exception type NoSuchAlgorithmException
2: private byte[] pwCrypt(String pw)
3: {
4:      java.security.MessageDigest d =null;
5:      d = java.security.MessageDigest.getInstance("SHA-1");
6:      d.reset();
7:      d.update(pw.getBytes());
8:      return  d.digest();

What am I doing wrong?
ASKER CERTIFIED SOLUTION
Avatar of mrcoffee365
mrcoffee365
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Mark
Mark

ASKER

Getting closer. Now it is telling me that I must return a result of type byte[], but the class def. for digest() says it is type byte[]. In my code (see above) I do:

return  d.digest();

so what's up now?


org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 2 in the jsp file: /include/crypt.inc
This method must return a result of type byte[]
1: <%!
2: private byte[] pwCrypt(String pw)
3: {
4:     try {
5:            java.security.MessageDigest d =null;

Avatar of Mark

ASKER

never mind. I moved the 'return' outside the try/catch block and it works now. Thanks. Here is the final code:

<%!
private byte[] pwCrypt(String pw)
{
    java.security.MessageDigest d =null;

    try {
        d = java.security.MessageDigest.getInstance("SHA-1");
        d.reset();
        d.update(pw.getBytes());
    }
    catch (Exception e){
      e.printStackTrace();
    }

    return  d.digest();
}
%>