Ho fatto questo stesso errore. La password predefinita era 50, quindi ho usato PowerShell per generare una stringa casuale lunga 50 e ho sostituito il vecchio SECRET_KEY con esso. Ho effettuato l'accesso e dopo aver sostituito SECRET_KEY la mia sessione precedente era stata invalidata.
Con Powershell ( fonte ):
# Load the .net System.Web namespace which has the GeneratePassword function
[Reflection.Assembly]::LoadWithPartialName("System.Web")
# GeneratePassword(int length, int numberOfNonAlphanumericCharacters)
[System.Web.Security.Membership]::GeneratePassword(50,5)
Con Bash ( fonte ):
# tr includes ABCabc123 and the characters from OWASP's "Password special characters list"
cat /dev/urandom | tr -dc 'A-Za-z0-9!"#$%&\''()*+,-./:;<=>?@[\]^_`{|}~' | head -c 100 ; echo
A questo punto ho pensato perché non provare una chiave più grande, quindi l'ho provata con una chiave lunga 100 e 1000. Entrambi hanno funzionato. Se capisco il codice sorgente , l'oggetto restituito dalla funzione di firma è un hash hmac in base64. RFC 2104 dice questo per la lunghezza richiesta di una chiave segreta HMAC.
Le applicazioni che usano chiavi più lunghe di B byte eseguiranno prima l'hashing della chiave usando H, quindi la stringa L byte risultante come chiave effettiva di HMAC.
La chiave per HMAC può essere di qualsiasi lunghezza (le chiavi più lunghe di B byte vengono prima cancellate usando H). Tuttavia, meno di L byte è fortemente scoraggiato in quanto ridurrebbe la sicurezza della funzione. Sono accettabili chiavi più lunghe di L byte, ma la lunghezza extra non aumenterebbe in modo significativo la forza della funzione. (Una chiave più lunga può essere consigliabile se la casualità della chiave è considerata debole.)
Per tradurre in linguaggio normale, la dimensione della chiave segreta deve avere le stesse dimensioni dell'output. La chiave deve anche essere in bit. Ogni cifra in base64 rappresenta 6 bit. Quindi, se avessi una password di 50 caratteri, avresti una chiave segreta 50 x 6 = 300 bit. Se stai usando SHA256, allora avresti bisogno di una chiave a 256 bit ( sha256 usa 256 bit per definizione ). Quindi una password lunga 50 dovrebbe funzionare a meno che tu non preveda di utilizzare un algoritmo di hashing più grande di SHA256.
Ma poiché ogni bit aggiuntivo nella chiave viene sottoposto a hash, la sua dimensione non ridurrà drasticamente le prestazioni. Ma ti garantirebbe che hai abbastanza bit per funzioni hash più grandi. SHA-512 verrebbe coperto da un SECRET_KEY lungo 100 ( 50 x 6 = 600 bit> 512 bit ).
data decode will breake forse indicare un codice (in django o esempio di progetto) che si romperà? EDIT: usando ancora django 1.4 - è così?