Hash的一個小應用

何為Hash?

Hash就是把任意長度的輸入通過散列算法變換成固定長度的輸出。

如何獲得Hash?

Hash是通過散列函數(shù)求出的。散列函數(shù)必須滿足以下兩個條件:
1.必須是一致的,同樣的輸入輸出要一致;
2.應將不同的輸入映射到不同的輸出;

應用小場景

眾所周知登陸網(wǎng)站一般都需要一個用戶名和登陸密碼,在用戶第一次注冊完成之后,每次登陸后臺都需要驗證用戶輸入的密碼。因此后臺需要記錄住用戶的相關信息:

Name Password
小明 123456
James 654321
Petter 666666

但是如果這樣保存起來的話,一旦被竊取,用戶信息就暴露了。這時候就可以用到今天的主角Hash了。我們可以通過hash函數(shù)把密碼映射一下,只保存映射值就可以了。因為從密碼到映射值是唯一的,但是通過映射值推倒密碼是比較困難的。

import hashlib


def passwordmd5(password):
    md5 = hashlib.md5()
    md5.update(password.encode())
    return md5.hexdigest()


print(passwordmd5("123456"))
print(passwordmd5("654321"))
print(passwordmd5("666666"))

簡單的利用hashlib庫里面的md5實現(xiàn)了一下,經過映射之后,記錄信息變成了以下:

Name Password
小明 e10adc3949ba59abbe56e057f20f883e
James c33367701511b4f6020ec61ded352059
Petter f379eaf3c831b04de153469d1bec345e

提高安全性

雖然以上方法已經把安全性提高了,但是如果用戶設置的密碼太簡單,有些人通過簡單測試,比如用一些常用的簡單密碼推倒hash值,然后再比獲得密碼。

111111 ->  96e79218965eb72c92a549dd5a330112
222222 ->  e3ceb5881a0a1fdaad01296d7554868d
......
666666 ->  f379eaf3c831b04de153469d1bec345e

為了再次提高安全性,可以對密碼進行‘加鹽’,即加入一些額外的字符來增加難度。這樣用戶即使設置了簡單密碼,加上額外字符后就不簡單了。

import hashlib


def passwordmd5(password):
    newpass = password + '_salt'
    md5 = hashlib.md5()
    md5.update(newpass.encode())
    return md5.hexdigest()
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,656評論 1 32
  • 1.ios高性能編程 (1).內層 最小的內層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結構(3).初始化時...
    歐辰_OSR閱讀 30,241評論 8 265
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,236評論 2 33
  • 所有貨幣都需要一些方法來控制供應,并強制執(zhí)行各種安全屬性以防止作弊。在法定貨幣方面,像中央銀行這樣的組織控制貨幣供...
    Nutbox_Lab閱讀 3,339評論 1 3
  • 時光有一種力量,它改變人們所認識的那個世界的模樣,花在我心中曾經是華而不實的,無論它鮮艷四溢地盛開時,還是落花無聲...
    三葉兒閱讀 462評論 0 0

友情鏈接更多精彩內容