Si su cifrado está usando relleno (es decir, no está en un modo de transmisión por secuencias como CFB, OFB, CTR o CTS), es posible que se dé cuenta simplemente observando el tamaño de los datos cifrados. Por ejemplo, si es de 24 bytes (192 bits), entonces podría ser Blowfish (porque tiene un tamaño de bloque de 64 bits, y 192 es divisible por 64), y no puede ser AES porque 192 no puede dividirse por 128 (AES tamaño de bloque). Pero dado que la mayoría de los tamaños de bloque son múltiplos entre sí, esto probablemente no será muy útil, pero a veces se puede usar para restringir la elección.
Si el método anterior falla, es computacionalmente imposible distinguir los datos descifrados con la clave incorrecta con el cifrado correcto y los datos descifrados con la clave correcta con el cifrado incorrecto. Ambos producen datos aleatorios. (Esto puede formalizarse asumiendo que el cifrado es una permutación aleatoria). Esto es a menos que el cifrado tenga grandes debilidades, por supuesto, lo que probablemente no sea el caso si se incluye en OpenSSL (excepto los antiguos seguros para la exportación como el rc4 de 40 bits).
Por lo tanto, la única forma es probar todos los cifrados posibles con los que se podrían haber cifrado (hay un número infinito de cifrados potenciales, pero solo unos pocos se utilizan en el mundo). Siempre se puede preparar un script para automatizarlo.
Por supuesto, puede almacenar el cifrado utilizado para cifrar el archivo junto a él (o dentro de él), como un byte que toma un valor diferente para cada cifrado. Si la clave se mantiene en secreto, esto no supone ningún riesgo para la seguridad (los sistemas de cifrado modernos están diseñados para confiar completamente en la clave, consulte el Principio de Kerckhoff).