Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unreported exception java.lang.Exception; must be caught or declared to be thrown [duplicate]

Tags:

java

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;
    }
}
like image 530
pee2pee Avatar asked May 24 '16 21:05

pee2pee


People also ask

How do you handle unreported exceptions in Java?

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.

Can a Java method throw multiple exceptions?

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();

How do you throw an exception in Java?

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.

What are the exceptions in Java?

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.


2 Answers

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 :

  1. 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();
    }
    
  2. Must be rethrowed by the caller

    public static void main(String[] args) throws Exception
    
like image 183
Yassin Hajaj Avatar answered Oct 08 '22 11:10

Yassin Hajaj


In your main method, the call to m16h may lead to an exception being thrown. In this case, you have two choices:

  • handle the exception yourself in the main method.
// in the main
try {
    System.out.println(xor(m16h(...));
} catch(Exception e) {
    // do something, e.g. print e.getMessage()
}
  • indicate that the main method can throw an exception, by appending throws Exception to its declaration.

public static void main(String args[]) throws Exception

like image 6
christophetd Avatar answered Oct 08 '22 11:10

christophetd