Я сделал эту же ошибку. Пароль по умолчанию был длиной 50, поэтому я использовал powershell для генерации случайной строки длиной 50 и заменил на нее старый SECRET_KEY. Я вошел в систему и после замены SECRET_KEY мой предыдущий сеанс был признан недействительным.
С Powershell ( источник ):
# 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)
С Bash ( источник ):
# 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
В этот момент я подумал, почему бы не попробовать больший ключ, поэтому я попробовал его с ключом длиной 100 и 1000. Оба работали. Если я понимаю исходный код , объект, возвращаемый функцией подписи, является хэшем hmac в base64. RFC 2104 имеет это сказать для требуемой длины секретного ключа HMAC.
Приложения, использующие ключи длиной более B байтов, сначала хешируют ключ с использованием H, а затем используют результирующую L-байтовую строку в качестве фактического ключа для HMAC.
Ключ для HMAC может иметь любую длину (ключи, длина которых превышает B байтов, сначала хэшируются с использованием H). Тем не менее, настоятельно рекомендуется использовать менее L байтов, поскольку это приведет к снижению уровня безопасности функции. Ключи длиннее L байтов являются приемлемыми, но дополнительная длина не будет значительно увеличивать силу функции. (Более длинный ключ может быть полезен, если случайность ключа считается слабой.)
Чтобы перевести на обычную речь, размер секретного ключа должен совпадать с размером вывода. Ключ также должен быть в битах. Каждая цифра в base64 представляет 6 бит. Таким образом, если бы у вас был пароль из 50 символов, у вас был бы секретный ключ 50 x 6 = 300 бит. Если вы используете SHA256, то вам потребуется ключ 256 бит ( sha256 использует 256 бит по определению ). Таким образом, пароль длиной 50 должен работать, если вы не планируете использовать алгоритм хеширования больше, чем SHA256.
Но так как все дополнительные биты в ключе хэшируются, его размер не сильно снижает производительность. Но это гарантирует, что у вас достаточно битов для больших хеш-функций. SHA-512 будет охвачен длиной SECRET_KEY длиной 100 ( 50 x 6 = 600 бит> 512 бит ).
data decode will break
и, возможно, указать какой-нибудь код (в django или в примере проекта), который сломается? РЕДАКТИРОВАТЬ: по-прежнему использовать Django 1.4 - это так?