2017-07-01 106 views
0

我正在遷移我的數據庫,我有一個用戶表,它有密碼存儲在md5中嗎?所以我想只在md5中存儲我的密碼,如果用戶輸入密碼,它接受it.so是否有任何方法可以保存我的密碼在md5。 say for example my user has a password :-'e10adc3949ba59abbe56e057f20f883e'以md5格式保存md5密碼django?

password =request.POST.get('password').strip() 
     confirmPassword =request.POST.get('confirmPassword').strip() 
     if password != confirmPassword: 
      messages.error(request,'password and confim password must be same') 
      return render(request, 'templates/sign-up.html') 
     if User.objects.filter(email=email).exists(): 
      messages.error(request, 'This email already exists') 
      return render(request, 'templates/sign-up.html') 
     new_password = make_password(password) 
     staff = False 
     superUser = False 
     status = True 
     authUser = User(password=new_password, 
         username=email, email=email,is_active=status, is_staff=staff, is_superuser=superUser) 
     authUser.save() 

,我想保存在我的AUTH_USER表我怎麼能做到這一點。

+1

@Terry ** SHA256不是密碼散列算法**密碼散列算法的全部目的是緩慢並且難以並行運行,因此攻擊者需要花費大量資源來破解密碼。 SHA256既快又便宜。您需要使用適當的基於密碼的密鑰派生函數,例如PBKDF2,BCrypt或Argon。 – knbk

+0

看到即時遷移我的老cms生成PHP到Django,我有用戶與密碼在MD5,所以我只是想複製和粘貼這些密碼,但同時我想django知道它的MD5密碼 –

+1

只使用哈希函數不是充足而且僅僅添加鹽對提高安全性沒有多大作用。相反,用隨機鹽迭代HMAC約100ms持續時間,然後用散列表保存鹽。使用諸如'PBKDF2','Rfc2898DeriveBytes','password_hash','Bcrypt'或類似函數的函數。關鍵是要讓攻擊者花費大量時間通過強力查找密碼。 – zaph

回答

0

的Django內置了一個MD5密碼散列器,只需將其添加到PASSWORD_HASHERS設置的底部:

PASSWORD_HASHERS = [ 
    'django.contrib.auth.hashers.PBKDF2PasswordHasher', 
    'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 
    'django.contrib.auth.hashers.Argon2PasswordHasher', 
    'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', 
    'django.contrib.auth.hashers.BCryptPasswordHasher', 
    'django.contrib.auth.hashers.UnsaltedMD5PasswordHasher', 
] 

這樣Django會檢查使用無鹽MD5密碼,但如果成功用戶登錄,密碼會自動更新爲使用更強大的散列。

但是,出於安全考慮,強烈建議您編寫wrapped hasher,它將使用更強大的密碼散列算法來散列md5散列。通過包裝md5散列,您可以簡單地導入舊的散列並以安全的方式保存它們,而無需用戶在生效之前先登錄。

+0

將工作的新用戶喜歡即時將我的舊cms生成在PHP中遷移到Django,所以我將只是從數據庫複製密碼nd將它們保存到我的新數據庫 –

+0

Django將識別一個純32字符作爲無鹽MD5的字符串,所以舊用戶可以登錄,但對於所有新用戶,它將使用「PASSWORD_HASHERS」設置中的第一個算法。通過將'PBKDF2'放在列表頂部,您可以確保使用安全密碼散列算法保護新用戶以及登錄新系統的舊用戶的密碼。 – knbk