Saya membuat kesalahan yang sama. Kata sandi default adalah 50 panjang jadi saya menggunakan PowerShell untuk menghasilkan 50 string acak panjang dan mengganti SECRET_KEY lama dengan itu. Saya masuk dan setelah mengganti SECRET_KEY, sesi saya sebelumnya tidak valid.
Dengan Powershell ( sumber ):
# 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)
Dengan Bash ( sumber ):
# 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
Pada titik ini saya berpikir mengapa tidak mencoba kunci yang lebih besar, jadi saya mencobanya dengan kunci panjang 100 dan 1000. Keduanya bekerja. Jika saya mengerti kode sumber , objek yang dikembalikan oleh fungsi penanda adalah hash hmac di base64. RFC 2104 mengatakan ini untuk panjang kunci kunci HMAC yang diperlukan.
Aplikasi yang menggunakan kunci lebih lama dari B byte pertama akan hash kunci menggunakan H dan kemudian menggunakan string L byte yang dihasilkan sebagai kunci aktual untuk HMAC.
Kunci untuk HMAC dapat berupa panjang apa saja (kunci lebih panjang dari B byte di hash pertama kali menggunakan H). Namun, kurang dari L byte sangat tidak disarankan karena akan mengurangi kekuatan keamanan fungsi. Kunci yang lebih panjang dari L byte dapat diterima tetapi panjang ekstra tidak akan secara signifikan meningkatkan kekuatan fungsi. (Kunci yang lebih panjang mungkin disarankan jika keacakan kunci dianggap lemah.)
Untuk menerjemahkan ke bicara normal, ukuran kunci rahasia harus sama dengan ukuran output. Kuncinya juga harus dalam bit. Setiap digit di base64 mewakili 6 bit. Jadi jika Anda memiliki kata sandi 50 karakter, Anda akan memiliki kunci rahasia 50 x 6 = 300 bit. Jika Anda menggunakan SHA256, maka Anda memerlukan kunci 256 bit ( sha256 menggunakan 256 bit menurut definisi ). Jadi kata sandi 50 panjang harus bekerja kecuali Anda berencana untuk menggunakan algoritma hashing lebih besar dari SHA256.
Tetapi karena ada bit tambahan dalam kunci yang hash, ukuran itu tidak akan secara drastis menurunkan kinerja. Tapi itu akan menjamin Anda bahwa Anda memiliki bit yang cukup untuk fungsi hash yang lebih besar. SHA-512 akan dilindungi oleh SECRET_KEY 100 panjang ( 50 x 6 = 600 bit> 512 bit ).
data decode will break
dan mungkin menunjukkan beberapa kode (dalam Django atau proyek contoh) yang akan rusak? EDIT: masih menggunakan Django 1.4 - apakah begitu?