淺談 Hash

概述

散列函數:又稱哈希函數散列算法,是一種從任何一種數據中建立小的數字「指紋」的方法。它使用128位,32個字符,16進制表示。(爲何是32個字符,由於在16進制中一個字符是0.5個字節,二進制是:128 / 8 = 16,那麼十六進制就是:128 / 8 * 2 = 32)算法

特色

  • 不可逆性
  • 對於相同的數據,每次加密以後的結果是固定的
  • 算法是公開的
  • 用來作數據識別

經常使用的幾種對稱加密方式

  • DES(Data Encryption Standard): 它是使用56位的對稱加密算法,由於位數太少,已經被人破譯,因此被取而代之的是AES加密方式。
  • 3DES:使用3個密鑰,對相同數據進行三次加密
  • AES(Advanced Encryption Standard): 高級加密標準,密鑰長度分別是128,192,256位

密碼加密方式

  • 直接是用MD5
    • 目前直接使用MD5傳輸已經再也不安全了,由於簡單的密碼,會經過網站(www.cmd5.com)查出來
    好比在 Terminal 中加密密碼:1q2w3e --> 對應的 MD5 是 3fde6bb0541387e4ebdadf7c2ff31123
    複製代碼
    一下就是在網站去查詢的結果,因此MD5相對再也不安全了。
  • MD5 加鹽(動態鹽)
    • 直接使用 MD5 加密不行,咱們能夠加點佐料,讓他變的複雜起來。
    pwd = (pwd + salt).MD5
    複製代碼
    這樣仍是隻能相對安全,若是獲取到了你的 salt,那麼仍是會被破譯。
    • 動態鹽就是,從服務器派發的加密字符串(足夠複雜的一個字符串),這樣破譯難道就加大了
  • HMAC 加密方法(重點闡述)
    • HMAC是啥:它是使用密匙,進行兩次Hash(兩次散列)
    • 開發過程當中服務器分發這個 key, Client 保存在本地,後面請求就是用這個key。
      • 那麼這個 key 在何時獲取了,有兩種狀況:
        • 首次註冊,發送給客戶端
        • 新設備登陸(登陸成功後)

這個 Data 是服務器下發的時間戳,通常精確到分鐘例如(201812091411)。客戶端在回傳時,給服務器。 那麼服務器會是怎麼處理了:

C --> 發送數據: pwd = (pwd + (hmac + salt) + date).md5
S --> 接受到數據:先校驗date
例如:
服務器下發的是 201812091411, 客戶端回傳的時 201812091411,可是如今服務器時間是 201812091412,
那麼時間對不上,該怎麼辦?此時服務器會減去一分鐘(201812091411)再做對比,此時兩個時間是相等的。
服務器就能夠作接下來的處理,若是超過服務器限定的時間,就超時,讓其從新請求。
複製代碼

數字簽名

  • 概念:就是把數據的Hash值經過RSA加密,而後一塊兒發送給服務器的形式。
  • 處理過程:客戶端發送包(原始數據 + (原始數據的Hash + RSA)),服務器接收到後,先經過RSA解密,解出RSA加密的數據(原始數據的Hash),在求原始數據的Hash值,若是兩個hash相等,那麼就證實數據沒有被篡改。

應用

應用模式

  • ECB(Electronic Code Book)
    • 電子密碼本模式,每一塊數據,獨立加密 ,無初始化向量
  • CBC(Cipher Block Chaining)
    • 密碼分組連接模式,使用一個密鑰和一個初始化向量[IV]對數據執行加密
    • 能夠有效保證密文的完整性,若是在傳輸數據時,一個數據塊丟失或改變,後面的數據將沒法正常解密

ECB 安全

openssl enc -aes-128-ecb -K 616263 -nosalt -in msg.txt -out msg.bin
616263: 是key值是abc二進制代碼
複製代碼

CBCbash

openssl enc -aes-256-cbc -iv 010203040506 -K 616263 -nosalt -in msg.txt -out msg.bin
iv: 是初始化向量,例如:時鐘的9點鐘方向等
複製代碼
相關文章
相關標籤/搜索