描述摘要和加鹽的原理

摘要原理

摘要是一種算法的總稱, 使用這種算法對(duì)原始數(shù)據(jù)進(jìn)行運(yùn)算后生成字符串.不同的原始數(shù)據(jù)理論上計(jì)算的結(jié)果是不同的.

這樣達(dá)到的效果是針對(duì)原始數(shù)據(jù)生成其獨(dú)一無二的'指紋'.通過對(duì)比數(shù)據(jù)的'指紋'可以識(shí)別數(shù)據(jù)的真?zhèn)?摘要算法是不可逆的, 即使拿到了這個(gè)指紋, 也無法利用這個(gè)指紋恢復(fù)出原始數(shù)據(jù).因此安全性有一定的保障.

常見的摘要算法有md5, sha1, sha256等.md5和sha1現(xiàn)在已經(jīng)不是安全的摘要算法了.谷歌號(hào)稱已經(jīng)可以產(chǎn)生任意"碰撞".碰撞的意思是說不同的原始數(shù)據(jù)有了同樣的運(yùn)算結(jié)果.如果可以產(chǎn)生任意碰撞, 就意味著任意的結(jié)果都可以用另一個(gè)原始數(shù)據(jù)來仿冒, 所以不安全了.

在保存用戶的密碼時(shí),常用的方法是使用摘要算法生成用戶密碼原始數(shù)據(jù)的摘要,在服務(wù)器數(shù)據(jù)庫里面只保存這個(gè)摘要而不是用戶的原始密碼.這樣做的好處是即使數(shù)據(jù)庫被黑客攻破, 被盜的也只是用戶的密碼的摘要而不是原始密碼.安全性有一定的提高.

可即便是這樣做, 安全性的提高也是有限的, 因?yàn)楹芏嘤脩羰褂玫氖呛唵蚊艽a.而這些簡單密碼的"指紋"早已被計(jì)算出來并生成了一個(gè)"指紋庫", 即彩虹表.如果用戶使用了簡單的密碼, 如生日/單詞等, 黑客可以通過比對(duì), 輕易地獲得用戶的原始密碼.

為了解決這個(gè)問題, 進(jìn)一步提高安全性, "加鹽"的操作被應(yīng)用在用戶密碼保存上.

加鹽原理

為了避免用戶的簡單密碼可以被輕易識(shí)別, 在生成摘要時(shí), 我們可以加點(diǎn)作料.作料可以是一個(gè)固定的字符串, 也可以是一個(gè)根據(jù)用戶不同的隨機(jī)字符串.如果是后者, 這個(gè)隨機(jī)字符串也需要被存儲(chǔ)在服務(wù)器中.

具體流程

1.用戶輸入密碼
2.服務(wù)接受到密碼后加鹽轉(zhuǎn)成復(fù)雜字符串
3.對(duì)這個(gè)字符串使用摘要算法
4.和數(shù)據(jù)庫中存儲(chǔ)結(jié)果比對(duì).

Python實(shí)現(xiàn)

    # 定義函數(shù)將用戶密碼轉(zhuǎn)為加鹽字符串
    @staticmethod
    def salted_password(password, salt='$!@><?>HUI&DWQa`'):
        """$!@><?>HUI&DWQa`"""
        salted = password + salt
        hash = hashlib.sha256(salted.encode('ascii')).hexdigest()
        return hash

    # 用戶登錄時(shí)比對(duì)加鹽字符串
    @classmethod
    def login(cls, form):
        salted = cls.salted_password(form['password'])
        u = User.find_by(username=form['username'], password=salted)
        if u is not None:
            result = '登錄成功'
            return u, result
        else:
            result = '用戶名或者密碼錯(cuò)誤'
            return User.guest(), result

    #用戶注冊(cè)時(shí)存儲(chǔ)加鹽字符串
    @classmethod
    def register(cls, form):
        valid = len(form['username']) > 2 and len(form['password']) > 2
        if valid:
            form['password'] = cls.salted_password(form['password'])
            u = User.new(form)
            result = '注冊(cè)成功<br> <pre>{}</pre>'.format(User.all())
            return u, result
        else:
            result = '用戶名或者密碼長度必須大于2'
            return User.guest(), result
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鄙煤,一起剝皮案震驚了整個(gè)濱河市躺酒,隨后出現(xiàn)的幾起案子掏熬,更是在濱河造成了極大的恐慌翘骂,老刑警劉巖荒勇,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忙迁,死亡現(xiàn)場離奇詭異睛挚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蜂大,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝶怔,“玉大人奶浦,你說我怎么就攤上這事√咝牵” “怎么了澳叉?”我有些...
    開封第一講書人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沐悦。 經(jīng)常有香客問我成洗,道長,這世上最難降的妖魔是什么藏否? 我笑而不...
    開封第一講書人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任瓶殃,我火速辦了婚禮,結(jié)果婚禮上副签,老公的妹妹穿的比我還像新娘遥椿。我一直安慰自己,他們只是感情好淆储,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開白布修壕。 她就那樣靜靜地躺著,像睡著了一般遏考。 火紅的嫁衣襯著肌膚如雪慈鸠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,021評(píng)論 1 291
  • 那天灌具,我揣著相機(jī)與錄音青团,去河邊找鬼。 笑死咖楣,一個(gè)胖子當(dāng)著我的面吹牛督笆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诱贿,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼娃肿,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了珠十?” 一聲冷哼從身側(cè)響起料扰,我...
    開封第一講書人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎焙蹭,沒想到半個(gè)月后晒杈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡孔厉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年拯钻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帖努。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粪般,死狀恐怖拼余,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亩歹,我是刑警寧澤匙监,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站捆憎,受9級(jí)特大地震影響舅柜,放射性物質(zhì)發(fā)生泄漏梭纹。R本人自食惡果不足惜躲惰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望变抽。 院中可真熱鬧础拨,春花似錦、人聲如沸绍载。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽击儡。三九已至塔沃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阳谍,已是汗流浹背蛀柴。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矫夯,地道東北人鸽疾。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像训貌,于是被迫代替她去往敵國和親制肮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 29,340評(píng)論 8 265
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理递沪,服務(wù)發(fā)現(xiàn)豺鼻,斷路器,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,093評(píng)論 1 32
  • 這里先簡單介紹單向散列函數(shù)款慨、消息摘要和哈希碰撞的的概念 單向散列函數(shù): 將任意長度的信息轉(zhuǎn)換為較短的固定長度的值拘领,...
    坤_7a1e閱讀 3,482評(píng)論 0 0
  • 凄冷的三月 文/與你相識(shí) 仿佛看見討好三月的桃花 在寂寞里獨(dú)享空虛冷 熱情與執(zhí)著被辜負(fù) 曾經(jīng)的期待正在咳血 那些善...
    與你相識(shí)_40fa閱讀 211評(píng)論 0 4