I want to use MessageDigest
to get a MD5 hash, but I get an error.
import java.security.MessageDigest;
public class dn {
public static void main(String[] args) {
MessageDigest md = MessageDigest.getInstance("MD5");
}
}
Error:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: Unhandled exception type NoSuchAlgorithmException
Error is referring to
NoSuchAlgorithmException - if a MessageDigestSpi implementation for the specified algorithm is not available from the specified provider.
found on this site http://docs.oracle.com/javase/6/docs/api/java/security/MessageDigest.html under getInstance
I have reinstalled the latest java jdk1.7.0_21 and a different version of eclipse, but the error persists. Everything else runs fine on eclipse.
I don't know what else could i do.
The error message is clear : the code doesn't compile (Unresolved compilation problem) because you're not handling the checked exception NoSuchAlgorithmException
that can be thrown by MessageDigest.getInstance()
.
Either add this exception to the throws clause of the main method, or catch it:
public static void main(String[] args) throws NoSuchAlgorithmException {
...
}
or
public static void main(String[] args) {
try {
...
}
catch (NoSuchAlgorithmException e) {
System.err.println("I'm sorry, but MD5 is not a valid message digest algorithm");
}
}
Note that this is a compilation error. You chose to launch your program despite the presence of compilation errors (visible in the "Problems" view of Eclipse), and despite the fact that Eclipse warned you about that before launching the program. So you tried executing code which doesn't compile, which you shouldn't do.
EDIT: fixed the typo in the code in NoSuchAlgorithmException
In addition to other answers here
Certain algorithms would not be available with some JVM
To make it truly portable application you should do this
public boolean isMDAvailable(String s)
{
boolean success=true;
try{MessageDigest.GetInstance(s);}
catch(NoSuchAlgorithmException x)
{
success=false;
}
return success;
}
Now you can get any available MD algorithm with this method
public MessageDigest getAvailableMessageDigest()
{
if(isMDAvailable("MD5")==true)return MessageDigest.GetInstance("MD5");
else if(isMDAvailable("MD2")==true)return MessageDigest.GetInstance("MD2");
else if(isMDAvailable("SHA-512")==true)return MessageDigest.GetInstance("SHA-512");
else return null;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With