/** * Construyye una configuración de cifrado. * * @param algo Algoritmo de cifrado * @param mode Modo de bloque para el cifrado * @param padd Relleno (<i>padding</i>) del cifrado */ public AOCipherConfig( final AOCipherAlgorithm algo, final AOCipherBlockMode mode, final AOCipherPadding padd) { // En caso de nulos tomamos defectos y algunas combinaciones // predefinidas final AOCipherAlgorithm ciphAlgo = algo != null ? algo : AOCipherAlgorithm.getDefault(); AOCipherBlockMode ciphMode = mode; if (ciphMode == null) { if (ciphAlgo.equals(AOCipherAlgorithm.PBEWITHMD5ANDDES) || ciphAlgo.equals(AOCipherAlgorithm.PBEWITHSHA1ANDDESEDE) || ciphAlgo.equals(AOCipherAlgorithm.PBEWITHSHA1ANDRC2_40)) { ciphMode = AOCipherBlockMode.CBC; } else { ciphMode = AOCipherBlockMode.ECB; } } AOCipherPadding ciphPadding = padd; if (ciphPadding == null) { ciphPadding = AOCipherPadding.PKCS5PADDING; } this.algo = ciphAlgo; this.mode = ciphMode; this.padding = ciphPadding; }
/** * Genera un objeto AOCipherConfig a partir de una cadena que siga uno de los siguientes patrones: * * <ul> * <li>Algoritmo/ModoBloque/Padding * <li>Algoritmo * </ul> * * Si sólo se especifica el algoritmo de cifrado, se tomara el modo y el padding * configurados por defecto para ese algoritmo. * * @return AOCipherConfig con una configuració específica de cifrado * @param cipherConfig Configuración de cifrado. * @throws NoSuchAlgorithmException Cuando el algoritmo no está soportado. */ public static AOCipherConfig parse(final String cipherConfig) throws NoSuchAlgorithmException { // Desmenbramos el algoritmo por si se ha indicado el modo de bloque y // el padding AOCipherAlgorithm cipAlgo = null; AOCipherBlockMode cipBlockMode = null; AOCipherPadding cipPadding = null; final String[] algoConfig = cipherConfig.split("/"); // $NON-NLS-1$ cipAlgo = AOCipherAlgorithm.getValueOf(algoConfig[0]); if (cipAlgo == null) { throw new NoSuchAlgorithmException(); } // Establecemos el resto de la configuracion if (algoConfig.length == 3) { cipBlockMode = AOCipherBlockMode.getValueOf(algoConfig[1]); cipPadding = AOCipherPadding.getValueOf(algoConfig[2]); } return new AOCipherConfig(cipAlgo, cipBlockMode, cipPadding); }