python+django中使用hashlib庫(kù)對(duì)用戶密碼進(jìn)行加密處理
使用hashlib庫(kù)的sha1對(duì)數(shù)據(jù)進(jìn)行加密
如:
import hashlib
password = hashlib.sha1(fr.cleaned_data['password']).hexdigest()
其中fr.cleaned_data['password']是從表單獲取到的用戶密碼
用戶登陸的時(shí)候,也需要對(duì)密碼進(jìn)行加密處理后再進(jìn)行驗(yàn)證,否則會(huì)登陸失敗
如下是例子:
views.py
deflogin(request):
? ? username = request.session.get('username',None)
? ? Tasklist = Task.objects.order_by("-id")[0:10]
? ? if request.method == "POST":
? ? ? ? fr = loginForm(request.POST)
? ? ? ? if fr.is_valid():
? ? ? ? ? ? username = fr.cleaned_data['username']
password = hashlib.sha1(fr.cleaned_data['password']).hexdigest() ? ?#對(duì)數(shù)據(jù)進(jìn)行sha1加密
? ? ? ? ? ? name = User.objects.get(user = username).name
? ? ? ? ? ? user = User.objects.filter(user=username,passwd=password) #數(shù)據(jù)過(guò)濾,這里如果都匹配則返回值,
? ? ? ? ? ? if user: #判斷這個(gè)是否有效值
? ? ? ? ? ? ? ? request.session['username'] = name
? ? ? ? ? ? ? ? return HttpResponseRedirect("/")
? ? ? ? ? ? else: #無(wú)效
? ? ? ? ? ? ? ? return HttpResponseRedirect("/login.html",context_instance=RequestContext(request))
? ? else:
? ? ? ? fr = loginForm()
? ? return render_to_response('login.html',locals(),context_instance=RequestContext(request))
我在用戶注冊(cè)的時(shí)候,是直接在modes.py中進(jìn)行密碼處理的:
class User(models.Model):
? ? user = models.IPAddressField(unique=True)
? ? passwd = models.CharField(max_length=100)
? ? name = models.CharField(max_length=100,unique=True)
? ? post = models.CharField(max_length=100)
? ? phone = models.CharField(max_length=100)
? ? email = models.EmailField(max_length=100)
? ? qq = models.CharField(max_length=100)
? ? permissions = models.CharField(max_length=10)
? ? def __unicode__(self):
? ? ? ? return self.user
def save(self,*args,**kwargs):
? ? ? ? self.passwd = hashlib.sha1(self.passwd+self.user).hexdigest()
? ? ? ? super(User,self).save(*args,**kwargs)
當(dāng)然,這個(gè)也可以直接在views.py中進(jìn)行加密處理,但是牛人說(shuō)了,在MVC模式下,數(shù)據(jù)處理應(yīng)該交給models處理
下圖是數(shù)據(jù)庫(kù)中得到的密碼:
passwd字段,都是經(jīng)過(guò)sha1加密碼處理的,如第一個(gè)帳號(hào)為drfdai的真實(shí)密碼是:111111
