2013-01-25 127 views
0

我将用户从其他站点迁移到django站点。旧的网页有盐和md5密码,我正在写一个自定义哈希alghorithm,以便用户可以用他们的旧密码进行身份验证。Django未知密码哈希算法 - 编写自定义哈希算法

当我试图登录老用户,我得到:

Unknown password hashing algorithm 'my_hashed_password'. Did you specify it in the PASSWORD_HASHERS setting? 

这就是我的密码散列器

class FallbackMD5PasswordHasher(BasePasswordHasher): 

    algorithm = "fallback_md5" 

    def salt(self): 
     return 'my_salt' 

    def encode(self, password): 
     return hashlib.md5(self.salt() + password).hexdigest() 

    def verify(self, password, encoded): 
     encoded_2 = self.encode(password, '') 
     return constant_time_compare(encoded, encoded_2) 

    def safe_summary(self, encoded): 
     return SortedDict([ 
      (_('algorithm'), self.algorithm), 
      (_('hash'), mask_hash(encoded, show=3)), 
     ]) 

这就是我的settings.py

PASSWORD_HASHERS = (
    'lfs_custom.hasher.FallbackMD5PasswordHasher', 
    'django.contrib.auth.hashers.PBKDF2PasswordHasher', 
    'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 
    'django.contrib.auth.hashers.BCryptPasswordHasher', 
    'django.contrib.auth.hashers.SHA1PasswordHasher', 
    'django.contrib.auth.hashers.MD5PasswordHasher', 
    'django.contrib.auth.hashers.CryptPasswordHasher', 
    ) 

请给我一些信息如何解决这个:)我找不到它为什么不工作。

+0

字符串“my_hashed_pa​​ssword”来自哪里?你可以查找项目文件吗? – Marat

+0

该字符串是我的数据库中的散列密码,在登录时返回错误。 – Efrin

回答

2

的Django尝试使用此format从数据库解析哈希:

<algorithm>$<iterations>$<salt>$<hash> 

您可能遇到的数据库平原哈希值。试图执行一个SQL数据库以正确的格式进行更新,这样的:

update auth_user set password=concat("md5$1$", password); 
0

如果需要此 {

类FallbackMD5PasswordHasher(BasePasswordHasher): 算法= “fallback_md5” 迭代= 100000 DEF盐(个体): 返回 ''

def encode(self, password, salt): 
    assert salt == '' 
    hash= hashlib.md5(password).hexdigest() 
    return "%s$%d$%s$%s" % (self.algorithm, self.iterations, '', hash) 

def verify(self, password, encoded): 
    algorithm, iterations, salt, hash = encoded.split('$', 3) 
    assert algorithm == self.algorithm 

    encoded_2 = self.encode(password, '') 
    return constant_time_compare(encoded, encoded_2) 

def safe_summary(self, encoded): 
    algorithm, iterations, salt, hash = encoded.split('$', 3) 
    return SortedDict([ 
     (_('algorithm'), algorithm), 
     (_('iterations'), iterations), 
     (_('salt'), mask_hash(salt)), 
     (_('hash'), mask_hash(hash)), 
    ]) 

def must_update(self, encoded): 
    return True 

}