Eigene Java Klasse importieren

Ich habe da ein Problem mit Java und ich steh voll auf dem Schlauch:
Ich habe ein package aes_hash mit den Klassen test und aes_crypt:
aes_crypt
Code:
package aes_hash;
import java.security.KeyFactory;
import java.io.*;
import javax.crypto.*;
import java.security.Key;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.*;

public class aes_crypt
{
    public static String padd_pass(String password) throws Exception{
        if (password.length() == 16) {
            return password;
    }
        else if(password.length() < 16){
            password = password + "1";
            while (password.length() < 16){
                password = password + "0";
            }
            return password;
        }
        char[] passwd = new char[16];
        password.getChars(0,15,passwd,0);
        String re = new String(passwd);
        System.out.println("Dass Passwort wurde auf " + re + " gekürzt.");
        return re;
    }
    public static String aes_encrypt(String message, String password) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        kgen.init(128); // 192 and 256 bits may not be available                                                                             

 
    // Generate the secret key specs.                                                                                                    
    SecretKey skey = kgen.generateKey();
    
    byte[] raw = padd_pass(password).getBytes();
    SecretKeySpec k = new SecretKeySpec(raw, "AES");

    cipher.init(Cipher.ENCRYPT_MODE, k);
    byte[] encrypted = cipher.doFinal(message.getBytes());
    return new BASE64Encoder().encode(encrypted);
    //return "Test";                                                                                                                     
    }
     
    public static String aes_decrypt(String crypted_message, String password) throws Exception {
    Cipher cipher = Cipher.getInstance("AES");
    KeyGenerator kgen = KeyGenerator.getInstance("AES");
    kgen.init(128);
                   
    byte[] raw = padd_pass(password).getBytes();
    SecretKeySpec k = new SecretKeySpec(raw, "AES");

    cipher.init(Cipher.DECRYPT_MODE, k);

    byte[] decrypted = cipher.doFinal(new BASE64Decoder().decodeBuffer(crypted_message));
    return new String(decrypted);
    }
}
und hier ist die Problemklasse. Ich will damit einfach auf aes_crypt zugreifen und ich habe schon alles mögliche ausprobiert, aber ich hab immer wieder Fehlermeldungen dass er aes_crypt nicht kennt.
Code:
package aes_hash;

public class test
{
    public static void main(String args[]){
    String a = aes_encrypt("a","b");
    }
             
}
Ich compile immer mit
Code:
javac test.java
und aes_crypt.class und aes_crypt.java sind im selben Ordner. Kann mir da jemand ein wenig helfen, aus den Büchern oder sonst was werde ich nicht schlau. Ich mache das ganze mit Emacs.

mfg Stein
 
Hmmm, in der Uni brauchte ich noch nie wirklich packages, aber meine Vermutung wäre, dass du, obwohl du im gleichen package bist, trotzdem den import machen musst. Das würde auch sehr für die Fehlermeldung sprechen.
 
So wie es aussieht sind die Fehler gewesen hier gewesen:
_ in den Klassennamen und
Code:
throws Exceptions
.
Denn die padd_pass läuft wenn man den Teil entfernt.
Nur läuft das ganze ohen throws Exceptions nicht... trotzdem danke
Mfg Stein
 
Wenn du statische Methoden aus anderen Klassen aufrufen willst, musst du die statische Methode entweder importieren oder voll qualifizieren.

Code:
package xyz;

class A {
  public static void doSomeThing() {
    ...
  }
  public static void doAnotherThing() {
    ...
  }
}
Code:
package foo;

import static xyz.A.doSomeThing;
// oder:(um alle statischen Methoden zu importieren)
//  import static xyz.A.*;

class B {
  public static void main(String[] args) {
    doSomeThing(); // Aufruf OK, da importiert
    xyz.A.doAnotherThing(); // OK, da der Scope voll qualifiziert wurde.
    // Falls die Klasse xyz.A importiert wurde, reicht auch ein:
    // A.doAnotherThing();
  }
}

Und noch die Sache mit den Exceptions:
Es gibt Excpetions, die immer mit try-catch abgefangen werden müssen, wenn sie in geworfen werden können, und es gibt einen anderen Typ von Exceptions, der nicht immer abgefangen werden muss.
Diejenigen Excpetions, die von RuntimeException abgeleitet wurden, müssen nicht abgefangen werden.
Wenn du ein Methode mit "throws Exceptionklasse" definierst, sagst du dem Compiler damit, dass diese Methode Exceptions dieses Typs werfen kann.
Wenn dieser Typ keine Runtime-Exception ist, dann musst du jedes Mal mit Try-Catch diesen Exceptiontyp abfangen, wenn du diese Methode aufrufst.
Du solltest also nur ein "throws" an eine Methode hängen, wenn diese wirklich diesen Exception-Typ werfen kann. Und in diesem Fall auch die genauen Exception-Typen, und nicht einfach die Oberklasse "Exception", da du sonst immer "Exception" abfangen musst.

mfg, metax.
 
Zurück
Oben