全網最全的http面試答案
阿新 • • 發佈:2020-11-24
python 自帶的加密方法 以及使用
-
1、這種加密方式的原理:加密時混入一段“隨機”字串(鹽值)再進行雜湊加密。即使
密碼相同,如果鹽值不同,那麼雜湊值也是不一樣的。現在網站開發中主要是運
用這種加密方法。 -
這個模組主要是用到了兩個函式:
- 密碼生成函式:generate_password_hash;
- 密碼驗證函式:check_password_hash;
-
密碼生成函式:generate_password_hash
(1)函式定義werkzeug.security.generate_password_hash(password, method='pbkdf2:sha1', salt_length=8) 1
引數說明:
- password: 明文密碼;
- method:雜湊加密的方法(需要hashlib庫支援的),格式為pdpdf2:[:iterations];
method:雜湊的方式,一般為SHA1;
iterations:(可選引數)迭代次數,預設為1000;
-slat_length: 鹽值的長度,預設為8。
-
、碼驗證函式:check_password_hash
(1)函式定義werkzeug.security.check_password_hash(pwhash, password) 1
引數說明:
- pwhash:generate_password_hash生成的雜湊字串(即加密後的密碼);
- password:需要驗證的明文密碼;
check_password_hash函式用於驗證經過generate_password_hash雜湊的密碼,若密碼匹配,則返回真,否則返回假。
models
#導包 generate_password_hash 加密 check_password_hash解密 from werkzeug.security import generate_password_hash, check_password_hash class User(BaseModel, db.Model): """使用者""" __tablename__ = "ih_user_profile" id = db.Column(db.Integer, primary_key=True) # 使用者編號 name = db.Column(db.String(32), unique=True, nullable=False) # 使用者暱稱 password_hash = db.Column(db.String(128), nullable=False) # 加密的密碼 mobile = db.Column(db.String(11), unique=True, nullable=False) # 手機號 real_name = db.Column(db.String(32)) # 真實姓名 id_card = db.Column(db.String(20)) # 身份證號 avatar_url = db.Column(db.String(128)) # 使用者頭像路徑 houses = db.relationship("House", backref="user") # 使用者釋出的房屋 orders = db.relationship("Order", backref="user") # 使用者下的訂單 # 加上property裝飾器後,會把函式變為屬性,屬性名即為函式名 @property def password(self): """讀取屬性的函式行為""" # print(user.password) # 讀取屬性時被呼叫 # 函式的返回值會作為屬性值 # return "xxxx" raise AttributeError("這個屬性只能設定,不能讀取") # 使用這個裝飾器, 對應設定屬性操作 @password.setter def password(self, value): """ 設定屬性 user.passord = "xxxxx" :param value: 設定屬性時的資料 value就是"xxxxx", 原始的明文密碼 :return: """ self.password_hash = generate_password_hash(value) # def generate_password_hash(self, origin_password): # """對密碼進行加密""" # self.password_hash = generate_password_hash(origin_password) def check_password(self, passwd): """ 檢驗密碼的正確性 :param passwd: 使用者登入時填寫的原始密碼 :return: 如果正確,返回True, 否則返回False """ return check_password_hash(self.password_hash, passwd)