나는이 같은 실수를했다. 기본 암호는 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)
배쉬 ( source )로 :
# 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의 hmac 해시입니다. RFC 2104 는 HMAC 비밀 키의 필요한 길이를 말해줍니다.
B 바이트보다 긴 키를 사용하는 응용 프로그램은 먼저 H를 사용하여 키를 해시 한 다음 결과 L 바이트 문자열을 HMAC의 실제 키로 사용합니다.
HMAC의 키는 임의 길이 일 수 있습니다 (B 바이트보다 긴 키는 먼저 H를 사용하여 해시 됨). 그러나 L 바이트 미만은 기능의 보안 강도를 저하 시키므로 권장하지 않습니다. L 바이트보다 긴 키는 허용되지만 여분의 길이는 기능 강도를 크게 증가시키지 않습니다. 키의 임의성이 약한 것으로 간주되면 더 긴 키를 사용하는 것이 좋습니다.
정상적인 말하기로 변환하려면 비밀 키의 크기가 출력과 크기가 같아야합니다. 키도 비트 단위 여야합니다. base64의 각 숫자는 6 비트를 나타냅니다. 따라서 50 자 암호가 있다면 50 x 6 = 300 비트 비밀 키가됩니다. SHA256을 사용하는 경우 256 비트 키가 필요합니다 ( sha256은 정의에 따라 256 비트를 사용함 ). 따라서 SHA256보다 큰 해싱 알고리즘을 사용하지 않으면 50 개의 긴 암호가 작동합니다.
그러나 키의 추가 비트가 해시되므로 키의 크기가 성능을 크게 저하시키지 않습니다. 그러나 더 큰 해시 함수에 충분한 비트가 있음을 보장합니다. SHA-512는 100 개의 긴 SECRET_KEY ( 50 x 6 = 600 비트> 512 비트 ) 로 덮여 있습니다 .
data decode will break
하고 깨질 수있는 코드 (장고 또는 예제 프로젝트)를 지적 할 수 있습니까? 편집 : 여전히 django 1.4를 사용하는 경우입니까?