0
我創建使用python 2.7與谷歌應用程序引擎小應用程序,我想存儲類似於哈希...存儲的SHA哈希作爲db.StringProperty()屬性
import hashlib
def PassHash(self):
return hashlib.sha256(
hashlib.sha256(self.username).digest() + self.password
).hexdigest() + ''
的結果
這將返回十六進制的字符串,然後我嘗試在一個類來存儲這樣的:
class User(db.Model):
UserName = db.StringProperty()
Password = db.StringProperty(multiline = True)
Email = db.EmailProperty()
def Authenticate(self):
UserList = User.gql("WHERE UserName = :username and Password = :password",
username = self.UserName,
password = self.PassHash())
return UserList.count() == 1
def Register(self):
self.Password = self.PassHash()
print self.Password
return db.put(self)
這個工作對前幾個測試案例,但在那之後我得到這個異常:
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 28: character maps to <undefined>
我懷疑問題可能出在gql查詢中。我已經考慮過使用openid,但這對了解如何在一般情況下會很有用。我已經嘗試了幾種不同的散列函數的變體,但沒有運氣。我錯過了什麼可以存儲在一個StringProperty()屬性?
我嘗試了您的建議,但我也發現嘗試散列哈希的摘要導致了問題。 所以 返回hashlib.sha256(hashlib.sha256(self.UserName).digest()+ self.Password).hexdigest() 產生的錯誤,而 返回hashlib.sha256(self.UserName + self.Password)。十六進制() 沒有。 – 2011-12-26 10:18:27