2018-08-15(22)數(shù)據(jù)加密

數(shù)據(jù)加密

hashlib數(shù)據(jù)加密

用于加密的相關(guān)操作猖辫,代替MD5模塊和sha模塊酥泞,主要提供SHA1,SHA224啃憎,SHA256芝囤,SHA384,SHA512算法。

要想使用它悯姊,要先導(dǎo)入hashlib模塊名党。

import hashlib
  • 簡(jiǎn)單加密:

    psw = "12345"
    temp = hashlib.sha1(psw.encode()) # HASA類(lèi)型 <sha1 HASH object @ 0x00000216D30FF7D8>
    print(temp.hexdigest) # 返回16進(jìn)制字符串

  • hash加鹽加密
  1. 導(dǎo)入加密函數(shù)
    from werkzeug.security import generate_password_hash, check_password_hash

  2. 密碼生成函數(shù)generate_password_hash
    temp = generate_password_hash(password, method = "pbkdf2:sha1:200", salt_length = 8)

    參數(shù)說(shuō)明:

  • password: 明文密碼
  • method: 哈希加密的方法,格式為pdpdf2:<method>[:iterations]
  • method: 哈希的方式挠轴, 一般為SHA1
  • iterations: (可選參數(shù)) 迭代次數(shù)传睹,默認(rèn)為1000
  • salt_length: 鹽值的長(zhǎng)度,默認(rèn)為8

加密后的字符串:

method$salt$hash

  1. 密碼驗(yàn)證函數(shù): check_password_hash
    check_password_hash(pwhash, password)
    定義參數(shù):
    pwhash: generate_password_hash 生成的哈希字符串
    password: 需要驗(yàn)證的明文密碼
    check_password_hash 函數(shù)用于驗(yàn)證經(jīng)過(guò)generate_password_hash加密過(guò)的密碼岸晦;
    若密碼匹配欧啤,則返回真,否則返回假启上。

token(jwt)令牌

站在主流的框架都已經(jīng)實(shí)現(xiàn)了前后端分離邢隧,為什么呢?

  1. 可以讓前后端的工作分工更明確冈在,不需要在視圖模板中加入很多{%XXX%}標(biāo)簽
  2. 為了適應(yīng)跨域調(diào)用或者多客戶(hù)端調(diào)用倒慧。例如:手機(jī)應(yīng)用調(diào)用的接口大都是第三方API。

雖然flask有json支持包券,但是對(duì)象轉(zhuǎn)化是一大問(wèn)題纫谅;所以整合JWT,讓框架具有更多的適應(yīng)性溅固。JWT就是基于token的權(quán)限驗(yàn)證付秕。

什么是token?侍郭?询吴?

Json Web Token(JWT)是為了網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開(kāi)發(fā)標(biāo)準(zhǔn),該token被設(shè)計(jì)的緊湊且安全亮元,特別適用于分布式站點(diǎn)的單點(diǎn)登錄(SSO)場(chǎng)景猛计。

JWT的聲明一般被用來(lái)在身份提供者和服務(wù)提供者見(jiàn)傳遞被認(rèn)證的用戶(hù)身份信息,以便于從資源服務(wù)器獲取資源爆捞,也可以增加一些額外的其他業(yè)務(wù)邏輯所必須的生命信息奉瘤。該token也可以直接被用于認(rèn)證,也可以被加密嵌削。

token的工作流程:

1. 用戶(hù)使用用戶(hù)信息請(qǐng)求服務(wù)器  

2. 服務(wù)器驗(yàn)證用戶(hù)信息  

3. 服務(wù)器向通過(guò)驗(yàn)證的用戶(hù)發(fā)送一個(gè)token  

4. 客戶(hù)端存儲(chǔ)token毛好, 并且在之后的每次請(qǐng)求時(shí)附加這個(gè)token值  

5. 服務(wù)器驗(yàn)證token,并且返回對(duì)應(yīng)數(shù)據(jù)苛秕。  

    token必須要在每次請(qǐng)求時(shí)發(fā)送給服務(wù)器肌访,它應(yīng)該保存在請(qǐng)求頭中,并且服務(wù)器要支持CORS(跨域資源共享)策略艇劫,一般我們?cè)诜?wù)器中執(zhí)行如下操作:

    Access-Control-Allow-Origin:*

JWT 構(gòu)成

JWT是由三部分構(gòu)成,各部分之間通過(guò)“.”來(lái)分隔吼驶。

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJVc2VySWQiOjEyMywiVXNlck5hbWUiOiJhZG1pbiJ9.Qjw1epD5P6p4Yy2yju3-fkq28PddznqRj3ESfALQy_U

第一部分:頭部(header)

第二部分:荷載(payload)

第三部分:簽證(signature)

  1. header
    頭部承載了兩部分信息:

    • 聲明類(lèi)型(jwt)
    • 聲明加密算法:(通常直接使用HMAC SHA256)
      完整的頭部信息示例:
      "typ":"JWT",
      "alg":"HS256"
      然后將頭部進(jìn)行base64加密構(gòu)成第一部分。
  2. plyload
    荷載用來(lái)存放有效信息,包含三個(gè)部分:

    • 標(biāo)準(zhǔn)中注冊(cè)的聲明
    • 公共的聲明
    • 私有的聲明
      標(biāo)注中注冊(cè)的聲明
      iss: jwt簽發(fā)者
      sub: jwt所面向的用戶(hù)
      aud: 接收jwt的一方
      exp: jwt的過(guò)期時(shí)間蟹演,這個(gè)過(guò)期時(shí)間必須大于簽發(fā)時(shí)間
      nbf: 定義在什么時(shí)間之前风钻,該jwt都是不可用的
      iat: jwt的簽發(fā)時(shí)間
      jti: jwt的唯一身份標(biāo)識(shí),主要用來(lái)作為一次性token酒请,從而回避重放攻擊
      公共的聲明:
      公共的聲明可以添加任何信息骡技,一般添加用戶(hù)的相關(guān)信息或其它業(yè)務(wù)需要的必要信息,但是不建議添加敏感信息羞反,因?yàn)樵摽蛻?hù)端可解密布朦;
      私有的聲明:
      私有的聲明是提供者和消費(fèi)者功能定義的聲明,一般不建議存放敏感信息昼窗,因?yàn)閎ase64是對(duì)稱(chēng)解密的是趴,意味著該部分信息可以歸類(lèi)為明文信息。
    # 定義一個(gè)payload
    payload = {
        "sub":"123456789",
        "name":"John Doe",
        "admin":true    
    }
    

然后將其base64加密澄惊,得到j(luò)wt的第二部分唆途。

signature

jwt的第三部分是簽證信息,它由三部分組成:

  • header(base64后的)

  • payload(base64后的)
    secred
    這個(gè)部分需要base64加密后的header和base64加密后的payload使用“.”連接組成的字符串掸驱,然后通過(guò)header中聲明的加密方式進(jìn)行secret組合加密肛搬,然后構(gòu)成了jwt的第三部分。

    var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);
    var signature = HMACSHA256(encodedString, 'secret'); // TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

注意:

secret是保存在服務(wù)器端的亭敢,jwt的簽發(fā)也是在服務(wù)器端的滚婉,secret就是用來(lái)進(jìn)行jwt的簽發(fā)和jwt的驗(yàn)證,所以它就是你服務(wù)端的私鑰帅刀,在任何場(chǎng)景都不應(yīng)該泄露出去。

總結(jié)

優(yōu)點(diǎn):

因?yàn)閖son的通用性远剩,所以JWT是可以跨語(yǔ)言支持的扣溺,像C#,JavaScript瓜晤,NodeJS锥余,PHP等許多語(yǔ)言都可以使用

因?yàn)橛闪藀ayload部分,所以JWT可以在自身存儲(chǔ)一些其它業(yè)務(wù)邏輯所必要的非敏感信息

便于傳輸痢掠,jwt的構(gòu)成非常簡(jiǎn)單驱犹,字節(jié)占用很小,所以它是非常便于傳輸?shù)?/p>

它不需要在服務(wù)端保存會(huì)話信息足画,所以它易于應(yīng)用的擴(kuò)展

安全相關(guān)

不應(yīng)該在jwt的payload部分存儲(chǔ)敏感信息雄驹,因?yàn)樵摬糠质强蛻?hù)端可解密的部分

保護(hù)好secret私鑰。該私鑰非常重要

如果可以淹辞,請(qǐng)使用https協(xié)議

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末医舆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔬将,老刑警劉巖爷速,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異霞怀,居然都是意外死亡惫东,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)毙石,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)凿蒜,“玉大人,你說(shuō)我怎么就攤上這事胁黑》戏猓” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵丧蘸,是天一觀的道長(zhǎng)漂洋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)力喷,這世上最難降的妖魔是什么刽漂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮弟孟,結(jié)果婚禮上贝咙,老公的妹妹穿的比我還像新娘。我一直安慰自己拂募,他們只是感情好庭猩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著陈症,像睡著了一般蔼水。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上录肯,一...
    開(kāi)封第一講書(shū)人閱讀 51,215評(píng)論 1 299
  • 那天趴腋,我揣著相機(jī)與錄音,去河邊找鬼论咏。 笑死优炬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的厅贪。 我是一名探鬼主播蠢护,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼卦溢!你這毒婦竟也來(lái)了糊余?” 一聲冷哼從身側(cè)響起秀又,我...
    開(kāi)封第一講書(shū)人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贬芥,沒(méi)想到半個(gè)月后吐辙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蘸劈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年昏苏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片威沫。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贤惯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出棒掠,到底是詐尸還是另有隱情孵构,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布烟很,位于F島的核電站颈墅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏雾袱。R本人自食惡果不足惜恤筛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芹橡。 院中可真熱鬧毒坛,春花似錦、人聲如沸林说。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)述么。三九已至蝌数,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間度秘,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工饵撑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剑梳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓滑潘,卻偏偏與公主長(zhǎng)得像垢乙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子语卤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

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

  • 轉(zhuǎn)載本文需注明出處:微信公眾號(hào)EAWorld追逮,違者必究酪刀。 本文目錄: 一、單體應(yīng)用 VS 微服務(wù) 二钮孵、微服務(wù)常見(jiàn)安...
    72a1f772fe47閱讀 8,554評(píng)論 3 25
  • 本文目錄:一骂倘、單體應(yīng)用 VS 微服務(wù)二、微服務(wù)常見(jiàn)安全認(rèn)證方案三巴席、JWT介紹四历涝、OAuth 2.0 介紹五、思考總...
    挨踢的懶貓閱讀 17,969評(píng)論 5 29
  • 1. 微服務(wù)架構(gòu)介紹 1.1 什么是微服務(wù)架構(gòu)漾唉? 形像一點(diǎn)來(lái)說(shuō)荧库,微服務(wù)架構(gòu)就像搭積木,每個(gè)微服務(wù)都是一個(gè)零件赵刑,并使...
    靜修佛緣閱讀 6,641評(píng)論 0 39
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理分衫,服務(wù)發(fā)現(xiàn),斷路器般此,智...
    卡卡羅2017閱讀 134,652評(píng)論 18 139
  • why JWT 現(xiàn)在蚪战,前后端分離和 RESTful API 越來(lái)越火熱,當(dāng)后臺(tái)漸漸開(kāi)始只負(fù)責(zé)為客戶(hù)端提供 API ...
    jaychenIsUsed閱讀 5,111評(píng)論 1 8