Bhe penso che fai upload tramite php, quindi utilizzando anche il db non vedo che problema ci sia a rinominare e criptare il nome del file per poi richiamarlo e rinominarlo per il download..
non so tipo una roba del genere :
Codice PHP:
// Uppo il file
if(move_uploaded_file($_FILES[file]['tmp_name'], "upload/".$_FILES[file][name])) {
$hash = sha1_file("upload/".$_FILE[file][name]); // Prendo l'hash
rename("upload/".$_FILE[file][name], "upload/".$hash); // Rinomino
}
Per poi rinominare si fa così :
Codice PHP:
// $d è il fetch della query se non si capisce
header("Cache-Control: public, must-revalidate");
header("Pragma: hack");
header("Content-type: ".mime_content_type($d[base_name])); // Definisco il mime
header("Content-Length: ".filesize($d[url])); // La dimensione
header("Content-Disposition: attachment; filename=".$d[base_name]); // Il nuovo nome
header("Content-Transfer-Encoding: binary");
// Faccio scaricare il file
$fp = fopen($d[url], 'r');
$buffer = fread($fp, filesize($d[url]));
fclose ($fp);
print $buffer;
Così dovresti anche evitare che scarichino i file con direct url, ammeno che non conoscano l'hash..
Spero chiarisca i dubbi 
( e spero di non aver fatto errori scrivendo :master: )
Davide