Я зробив цю саму помилку. Пароль за замовчуванням був 50 довгим, тому я використав shellhell для створення 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. Обидва працювали. Якщо я розумію вихідний код , об'єктом, який повертається функцією підписання, є хмаковий хеш у 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 буде охоплено 100 довгим SECRET_KEY ( 50 x 6 = 600 біт> 512 біт ).
data decode will break
розібратися, що ви маєте на увазі під собою, і, можливо, вказати якийсь код (у django чи приклад проекту), який порушиться? EDIT: все ще використовується django 1.4 - це так?