@Override
	@SuppressWarnings("unchecked")
	protected void load() {
		if (!credentialFile.exists() || password == null || salt == null) {
			return;
		}
		FileInputStream fis = null;
		CipherInputStream cis = null;
		ObjectInputStream ois = null;
		try {
			byte[] ivBytes = new byte[16];
			/* read IV */
			fis = new FileInputStream(credentialFile);
			fis.read(ivBytes);
			/* prepare decryption key */
			IvParameterSpec iv = new IvParameterSpec(ivBytes);
			SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
			KeySpec spec = new PBEKeySpec(password, salt, 1024, 128);
			SecretKey tmp = factory.generateSecret(spec);
			SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
			cipher.init(Cipher.DECRYPT_MODE, secret, iv);
			/* read encrypted data */
			cis = new CipherInputStream(fis, cipher);
			ois = new ObjectInputStream(cis);
			tokens = (Map<String, OAuth2Token>) ois.readObject();
		} catch (GeneralSecurityException | IOException | ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			try {
				if (ois != null) {
					ois.close();
				}
				if (cis != null) {
					cis.close();
				}
				if (fis != null) {
					fis.close();
				}
			} catch (IOException e) {
				/* ignore closing exception */
			}
		}
	}