I tried compiling the below but get the following around m16h(x):
Line: 16
unreported exception java.lang.Exception; must be caught or declared to be thrown
Not sure why though. I've tried various things but it seems I am doing it right.
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Test{
public static void main(String args[]){
byte[] k1 = parseHexString("eb35a6c92c3b8c98033d739969fcc1f5ee08549e", 20);
byte[] k2 = parseHexString("57cb8b13a1f654de21104c551c13d8820b4d6de3", 20);
byte[] k3 = parseHexString("c4c4df2f8ad3683677f9667d789f94c7cffb5f39", 20);
System.out.println(k1);
System.out.println(k2);
System.out.println(k3);
System.out.println(xor(m16h(add(xor(xor(m16h(add(k1, m16h(add(k2, m16h(k3))))), k3), k2), k1)), k3));
}
public static byte[] m16h(byte[] m) throws Exception {
return parseHexString(SHA1(m), 20);
}
private static byte[] xor(byte[] x, byte[] y) {
int l = x.length;
if (l != y.length) {
return null;
}
byte[] ob = new byte[l];
for (int i = 0; i < l; i++) {
ob[i] = (byte) (x[i] ^ y[i]);
}
return ob;
}
public static byte[] parseHexString(String x, int len) {
byte[] ret = new byte[len];
for (int i = 0; i < len; i++) {
ret[i] = (byte) Integer.parseInt(x.substring(i * 2, (i * 2) + 2), 16);
}
return ret;
}
public static byte[] add(byte[] x, byte[] y) {
byte[] added = new byte[(x.length + y.length)];
System.arraycopy(x, 0, added, 0, x.length);
System.arraycopy(y, 0, added, x.length, y.length);
return added;
}
public static String SHA1(byte[] c) throws NoSuchAlgorithmException {
return base16encode(MessageDigest.getInstance("SHA-1").digest(c));
}
public static String base16encode(byte[] data) {
String res = "";
for (byte b : data) {
res = String.format("%s%02x", new Object[]{res, Byte.valueOf(b)});
}
return res;
}
}
you need to wrap this line try{ String filename = reader. readLine(); }catch(IOException e){ } or use throws IO exception at the main method. public static void main(String[] args) throws IOException either of them will work.
You can have the possibility of throwing multiple different exceptions. For example: if (obj == null) throw new NullPointerException(); if (some other case) throw new IllegalArgumentException(); if (this == this) throw new IOException();
Throwing an exception is as simple as using the "throw" statement. You then specify the Exception object you wish to throw. Every Exception includes a message which is a human-readable error description. It can often be related to problems with user input, server, backend, etc.
Definition: An exception is an event, which occurs during the execution of a program, that disrupts the normal flow of the program's instructions. When an error occurs within a method, the method creates an object and hands it off to the runtime system.
public static byte[] m16h(byte[] m) throws Exception
The signature of your method indicates that an Exception is susceptible of being thrown.
This means that the exception either :
Must be handled by the caller
try {
System.out.println(xor(m16h(add(xor(xor(m16h(add(k1, m16h(add(k2, m16h(k3))))), k3), k2), k1)), k3));
} catch (Exception e) {
e.printStackTrace();
}
Must be rethrowed by the caller
public static void main(String[] args) throws Exception
In your main method, the call to m16h
may lead to an exception being thrown. In this case, you have two choices:
// in the main
try {
System.out.println(xor(m16h(...));
} catch(Exception e) {
// do something, e.g. print e.getMessage()
}
throws Exception
to its declaration.public static void main(String args[]) throws Exception
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