Understanding Exceptions
Hi all,
I'm in the process of learning Java and would appreciate a bit of
guidance on the correct way to handle exceptions.
The element of code I'm working on is a simple sha2-256 hash:
private static String sha256(byte[] password, byte[] iv) {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(iv);
byte[] hash = md.digest(password);
return byteArrayToHexString(hash);
}
During compile this throws an unreported exception
java.security.NoSuchAlgorithmException. This in itself seems odd to me
because there is such an Algorithm as "SHA-256".
One means to handle the exception is:
private static String sha256(byte[] password, byte[] iv)
throws NoSuchAlgorithmException {
This appears to be a nasty solution however because every method that
calls this method is then also required to throw the same exception.
Better seems to be to catch the exception with something like:
private static String sha256(byte[] password, byte[] iv) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(iv);
byte[] hash = md.digest(password);
return byteArrayToHexString(hash);
} catch (NoSuchAlgorithmException nsae) {
}
}
Now I've solved one problem and created another because the compiler
complains that I'm missing a return (which is true). I can insert a
false one, as in:
private static String sha256(byte[] password, byte[] iv) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(iv);
byte[] hash = md.digest(password);
return byteArrayToHexString(hash);
} catch (NoSuchAlgorithmException nsae) {
}
return "foobar";
}
This seems downright ugly though and is probably also evil. As the
exception never happens though, because there is such an algorithm as
"SHA-256", perhaps it is correct. Argh, brain ache! :)
Any advice would be much appreciated.
Steve