public static byte[] encryptDataFile(String filename, SecretKey skey, DataOutput os)
    {
        DataInputStream is = null;
        try {
            Cipher cipher = Cipher.getInstance(AES_ALGORITHM);

            // Initialisierung
            cipher.init(Cipher.ENCRYPT_MODE, skey);

            // Der Initialisierungsvektor IV muss dem EMPFAENGER spaeter als
            // Parameter mit uebergeben werden (falls nicht Betrieb im
            // ECB-Modus), daher muessen die erzeugten Parameter aus dem
            // Cipher-Objekt ausgelesen werden.
            if(cipher.getParameters() != null){
                System.out.println("Cipher Parameter: "
                        + cipher.getParameters().toString());
                AlgorithmParameters ap = cipher.getParameters();
                byte[] v = cipher.getIV();
                File ivFile = new File("iv");
                DataOutputStream foo = new DataOutputStream(new FileOutputStream(ivFile));
                foo.write(v);
                foo.close();
            }


            // die zu schuetzenden Daten
            File file = new File(filename);
            is = new DataInputStream(new FileInputStream(
                    file));
            long length = file.length();
            if((Integer.MAX_VALUE - length) < 0)
            {
                return null;
            }


            byte[] plain = new byte[16];
            int bytesRead;
            int fileLengthModulo = (int)(file.length()%16);
            while (( bytesRead =is.read(plain)) == 16)
            {
                os.write(cipher.update(plain));
                plain = new byte[16];
            }
            if(fileLengthModulo!=0)
            {
                byte[] rest = new byte[bytesRead];
                System.arraycopy(plain, 0, rest, 0, bytesRead);
                os.write(cipher.doFinal(rest));
            }else{
                os.write(cipher.doFinal());
            }


//            byte[] plain = new byte[(int)length];
//            is.readFully(plain);
//            System.out.println("Daten: " + new String(plain));

            // nun werden die Daten verschluesselt
            // (update wird bei grossen Datenmengen mehrfach aufgerufen werden!)
//            byte[] encData = cipher.update(plain);
//
//            mit doFinal abschliessen (Rest inkl. Padding ..)
//            byte[] encRest = cipher.doFinal();
//            byte[] both = new byte[encData.length+encRest.length];
//
//            System.arraycopy(encData, 0, both, 0, encData.length);
//            System.arraycopy(encRest, 0, both, encData.length, encRest.length);
            return plain;
        }catch (Exception e)
        {
            e.printStackTrace();
            return null;
        }

    }