Se il tuo cifrario sta usando padding (cioè non è in una modalità di streaming come CFB, OFB, CTR o CTS), allora potrebbe essere in grado di dirlo semplicemente osservando la dimensione dei dati crittografati. Ad esempio se è 24 byte (192 bit), quindi potrebbe essere Blowfish (perché ha una dimensione di blocco di 64 bit e 192 è divisibile per 64) e non può essere AES perché 192 non può essere diviso per 128 (AES misura del blocco). Ma dato che la maggior parte delle dimensioni dei blocchi sono multipli l'una dell'altra, questo probabilmente non sarà molto utile, ma può essere usato per restringere la scelta a volte.
Se il metodo di cui sopra non è riuscito, è computazionalmente impossibile distinguere i dati decrittografati con la chiave errata con il codice corretto ei dati decrittografati con la chiave corretta con il cifrario sbagliato. Entrambi producono dati casuali. (questo può essere formalizzato assumendo che il codice sia una permutazione casuale). Questo a meno che il cifrario non abbia grandi punti deboli, ovviamente, che probabilmente non è il caso se è incluso in OpenSSL (eccetto quelli vecchi sicuri per l'esportazione come 40-bit rc4).
Quindi l'unico modo è provare tutti i possibili cifrari con i quali i dati potrebbero essere stati crittografati (esiste un numero infinito di potenziali cifrari, ma solo pochi sono effettivamente utilizzati nel mondo). Puoi sempre creare uno script per automatizzarlo.
Ovviamente, è possibile memorizzare il codice utilizzato per crittografare il file accanto ad esso (o al suo interno), come un byte che assume un valore diverso per ogni cifra. Se la chiave viene tenuta segreta, questo non presenta alcun rischio per la sicurezza (i codici moderni sono progettati per fare affidamento completamente sulla chiave - vedi Principio di Kerckhoffs).