Ich habe den gleichen Fehler gemacht. Das Standardkennwort war 50 lang, also habe ich Powershell verwendet, um eine 50 lange lange Zeichenfolge zu generieren, und das alte SECRET_KEY durch dieses ersetzt. Ich war angemeldet und nach dem Ersetzen von SECRET_KEY war meine vorherige Sitzung ungültig.
Mit Powershell ( Quelle ):
# 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)
Mit Bash ( Quelle ):
# 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
An diesem Punkt dachte ich mir, warum ich nicht einen größeren Schlüssel probieren sollte, also versuchte ich es mit einem 100 und 1000 langen Schlüssel. Beide haben funktioniert. Wenn ich den Quellcode verstehe , ist das von der Signiererfunktion zurückgegebene Objekt ein hmac-Hash in base64. RFC 2104 hat dies für die erforderliche Länge eines geheimen HMAC-Schlüssels zu sagen.
Anwendungen, die Schlüssel verwenden, die länger als B Bytes sind, hashen den Schlüssel zuerst mit H und verwenden dann die resultierende L-Byte-Zeichenfolge als eigentlichen Schlüssel für HMAC.
Der Schlüssel für HMAC kann beliebig lang sein (Schlüssel, die länger als B Bytes sind, werden zuerst mit H gehasht). Von weniger als L Bytes wird jedoch dringend abgeraten, da dies die Sicherheitsstärke der Funktion verringern würde. Schlüssel, die länger als L Bytes sind, sind akzeptabel, aber die zusätzliche Länge würde die Funktionsstärke nicht wesentlich erhöhen. (Ein längerer Schlüssel kann ratsam sein, wenn die Zufälligkeit des Schlüssels als schwach angesehen wird.)
Um in normales Sprechen zu übersetzen, muss die Größe des geheimen Schlüssels der Größe der Ausgabe entsprechen. Der Schlüssel muss auch in Bits sein. Jede Ziffer in base64 repräsentiert 6 Bits. Wenn Sie also ein 50-stelliges Passwort hätten, hätten Sie einen geheimen 50 x 6 = 300-Bit-Schlüssel. Wenn Sie SHA256 verwenden, benötigen Sie einen 256-Bit-Schlüssel ( sha256 verwendet per Definition 256 Bit ). Ein 50-langes Passwort sollte also funktionieren, es sei denn, Sie planen, einen Hashing-Algorithmus zu verwenden, der größer als SHA256 ist.
Da jedoch zusätzliche Bits im Schlüssel gehasht werden, wird die Leistung durch die Größe des Schlüssels nicht drastisch verringert. Aber es würde Ihnen garantieren, dass Sie genug Bits für größere Hash-Funktionen haben. SHA-512 würde von einem 100 langen SECRET_KEY ( 50 x 6 = 600 Bit> 512 Bit ) abgedeckt .
data decode will breakdarauf eingehen, was Sie damit meinen, und vielleicht auf einen Code (in Django oder Beispielprojekt) hinweisen, der kaputt geht? EDIT: immer noch mit Django 1.4 - ist das der Fall?