Popełniłem ten sam błąd. Domyślne hasło miało długość 50, więc użyłem programu PowerShell do wygenerowania losowego ciągu o długości 50 i zastąpiłem go starym kluczem SECRET_KEY. Byłem zalogowany i po wymianie klucza SECRET_KEY moja poprzednia sesja została unieważniona.
Z Powershell ( źródło ):
# 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)
Z Bash ( źródło ):
# 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
W tym momencie pomyślałem, dlaczego nie spróbować większego klucza, więc wypróbowałem go z kluczem o długości 100 i 1000. Oba działały. Jeśli rozumiem kod źródłowy , obiekt zwrócony przez funkcję osoby podpisującej jest skrótem hmac w base64. RFC 2104 ma to do powiedzenia na temat wymaganej długości tajnego klucza HMAC.
Aplikacje, które używają kluczy dłuższych niż B, najpierw haszują klucz za pomocą H, a następnie używają wynikowego łańcucha L bajtów jako rzeczywistego klucza do HMAC.
Klucz dla HMAC może mieć dowolną długość (klucze dłuższe niż B bajty są najpierw haszowane przy użyciu H). Jednak zdecydowanie mniej niż L bajtów jest odradzane, ponieważ zmniejszyłoby to siłę bezpieczeństwa funkcji. Klucze dłuższe niż L bajtów są dopuszczalne, ale dodatkowa długość nie zwiększyłaby znacząco siły funkcji. (Dłuższy klucz może być wskazany, jeśli losowość klucza jest uważana za słabą).
Aby przetłumaczyć na zwykłe mówienie, rozmiar tajnego klucza musi być tego samego rozmiaru co wynik. Klucz musi być również w bitach. Każda cyfra w base64 reprezentuje 6 bitów. Więc jeśli miałbyś 50-znakowe hasło, miałbyś tajny klucz 50 x 6 = 300 bitów. Jeśli używasz SHA256, potrzebujesz 256-bitowego klucza ( sha256 z definicji używa 256 bitów ). Dlatego 50 długie hasło powinno działać, chyba że planujesz użyć algorytmu skrótu większego niż SHA256.
Ale ponieważ wszelkie dodatkowe bity klucza są haszowane, jego rozmiar nie drastycznie obniży wydajność. Ale to zagwarantuje ci, że masz wystarczającą ilość bitów do większych funkcji skrótu. SHA-512 byłby objęty 100 długim kluczem SECRET_KEY ( 50 x 6 = 600 bitów> 512 bitów ).
data decode will break
a może wskazać kod (w django lub przykładowym projekcie), który się zepsuje? EDYCJA: nadal używasz django 1.4 - czy tak jest?