@Override
    public void init(Object[] args) {
        try {
            // Nasty! If you use the same SecureRandom for different Cipher instances
            // you get BadPadding errors on decrypt!?
            if (log.isDebugEnabled()) {
                log.debug(String.format(
                        "Initialising ciphers (for cryp and decryp) with key size of %d with algo %s and passphrase of %s",
                        KEY_SIZE, ALGO, passphrase));
            }

            SecureRandom srEncrypt = getSecureRandom(passphrase);
            cipherEncrypt = getCipher(ALGO, KEY_SIZE, Cipher.ENCRYPT_MODE,
                    srEncrypt);

            SecureRandom srDecrypt = getSecureRandom(passphrase);
            cipherDecrypt = getCipher(ALGO, KEY_SIZE, Cipher.DECRYPT_MODE,
                    srDecrypt);
            if (log.isDebugEnabled()) {
                log.debug(String.format(
                        "Successfully initialised ciphers (for cryp and decryp) with key size of %d with algo %s and passphrase of %s",
                        KEY_SIZE, ALGO, passphrase));
            }
            isInitialised = true;
        } catch (NoSuchPaddingException e) {
            log.error("", e);
        } catch (InvalidKeyException e) {
            String errorMessage = e.getMessage();

            if (errorMessage.toLowerCase().contains(ILLEGAL_KEY_SIZE_MESSAGE)) {
                // Here, a listening class could possibly handle key renegotiation (see TODO)
                log.error("It would seem that a key size of {} is not permitted",
                    KEY_SIZE);
            }

            log.error("", e);
        } catch (NoSuchAlgorithmException e) {
            log.error("", e);
        }
    }