Hash & 對稱加密


Hash一般譯為“散列”搓蚪,也有直接音譯為“哈隙侍叮”,就是把任意長度的輸入通過散列算法變換成固定長度的輸出漠酿,該輸出就是散列值炒嘲。這種轉換是一種壓縮映射匈庭,也就是阱持,散列值的空間通常遠小于輸入的空間,不同的輸入可能會散列成相同的輸出啼止,所以不可能從散列值來確定唯一的輸入值兵罢,簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數滓窍。

Hash的特點

  • 算法是公開的
  • 對相同數據運算得到的結果是一樣的
  • 對不同數據運算,如MD5得到的結果默認是128位即横,32個字符(16進制標識)
  • 不可逆運算
  • 信息摘要东囚,信息“指紋”战授,是用來做數據識別的


    目前常見的散列算法

Hash的用途

  • 用戶密碼加密:將密碼進行加密后存儲在服務器植兰,以防止賬號信息泄漏楣导。
  • 保護資料\版權:散列值可用于唯一地識別機密信息。
  • 確保傳遞真實的信息:消息或數據的接受者確認消息是否被篡改的性質叫數據的真實性噩凹,也稱為完整性栓始。發(fā)信人通過將原消息和散列值一起發(fā)送血当,可以保證真實性臊旭。如數字簽名
  • 搜索引擎:對搜索內容進行分詞后使用hash計算出結果的和离熏,然后匹配出搜索結果。
  • 語音識別:如分析正在播放的音樂钻蔑,并將它于存儲在數據庫中的已知的散列值進行比較咪笑。用戶就能夠收到被識別的音樂的曲名娄涩。

在實際應用中,不能直接使用MD5扬虚,如果直接使用的話辜昵,很可能會被破解,如網站cmd5通過窮舉字符組合進行反向查詢贷洲。所以我們在應用的時候可以使用一些手段优构,如HMAC方案雁竞,通過加key碑诉、時間戳等手段進行二次hash運算进栽。


對稱密鑰加密
又稱為對稱加密、私鑰加密快毛、共享密鑰加密唠帝。這類算法在加密和解密時使用相同的密鑰,或是使用兩個可以簡單地相互推算的密鑰贴铜。常見的對稱加密算法有AES("高級加密標準")绍坝、ChaCha20轩褐、3DES间坐、Salsa20竹宋、DES("數據加密標準")蜈七、Blowfish飒硅、IDEA( "國際資料加密算法")、RC5庵芭、RC6双吆、Camellia好乐。對稱加密的速度比公鑰加密快很多蔚万,在很多場合都需要對稱加密临庇。

對稱加密有兩種不同的應用模式:

  • ECB(Electronic Code Book):電子密碼本模式假夺,每一塊數據獨立加密侄泽,它是最基本的加密模式悼尾,相同的明文將永遠加密成相同的密文闺魏。它容易受到密碼本重放攻擊析桥,一般情況下很少用艰垂。
  • CBC(Cipher Block Chaining):密碼分組鏈接模式猜憎,使用一個密鑰和一個初始化向量[IV]對數據執(zhí)行加密胰柑。
    明文被加密前要與前面的密文進行異或運算后再密碼柬讨,因此只要選擇不同的初始向量踩官,相同的密文加密后會形成不同的密文蔗牡,這是目前應用最廣泛的模式蛋逾。第一塊數據都與前面是關聯的区匣,因此CBC可以有效的保證密文的完整性,如果數據塊傳遞過程中丟失姑丑,那么其后面的數據將無法正常解密栅哀。

使用openssl加解密

  • 加密:

    • AES(ECB)加密“hello”字符串
      $ echo -n hello | openssl enc -aes-128-ecb -K 616263 -nosalt | base64
    • AES(CBC)加密“hello”字符串
      $ echo -n hello | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt | base64
  • 解密:

    • AES(ECB)解密
      echo -n d1QG4T2tivoi0Kiu3NEmZQ== | base64 -D | openssl enc -aes-128-ecb -K 616263 -nosalt –d
    • AES(CBC)解密
      echo -n u3W/N816uzFpcg6pZ+kbdg== | base64 -D | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt –d

OC代碼使用
引入頭文件#import <CommonCrypto/CommonCrypto.h>,加解密都是使用同一個方法

    /*參數說明
     1痴柔、kCCEncrypt 加密/kCCDecrypt 解密
     2咳蔚、加密算法谈火。
     3堆巧、加密選項:ECB/CBC,iv存在使用kCCOptionPKCS7Padding荒揣,不存在使用kCCOptionPKCS7Padding | kCCOptionECBMode
     4焊刹、加密的密鑰
     5虐块、密鑰的長度
     6贺奠、iv 初始化向量
     7儡率、加密的數據
     8崎逃、加密的數據長度
     9个绍、密文的內存地址
     10、密文緩沖區(qū)的大小
     11篮洁、加密結果大小
    */
CCCryptorStatus CCCrypt(
    CCOperation op,         /* kCCEncrypt, etc. */
    CCAlgorithm alg,        /* kCCAlgorithmAES128, etc. */
    CCOptions options,      /* kCCOptionPKCS7Padding, etc. */
    const void *key,
    size_t keyLength,
    const void *iv,         /* optional initialization vector */
    const void *dataIn,     /* optional per op and alg */
    size_t dataInLength,
    void *dataOut,          /* data RETURNED here */
    size_t dataOutAvailable,
    size_t *dataOutMoved)
    API_AVAILABLE(macos(10.4), ios(2.0));
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末篷牌,一起剝皮案震驚了整個濱河市枷颊,隨后出現的幾起案子信卡,更是在濱河造成了極大的恐慌傍菇,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡锡宋,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門显拜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矮固,“玉大人盹兢,你說我怎么就攤上這事〖郏” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵惠赫,是天一觀的道長把鉴。 經常有香客問我故黑,道長儿咱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任场晶,我火速辦了婚禮混埠,結果婚禮上,老公的妹妹穿的比我還像新娘诗轻。我一直安慰自己钳宪,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布扳炬。 她就那樣靜靜地躺著吏颖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恨樟。 梳的紋絲不亂的頭發(fā)上半醉,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音劝术,去河邊找鬼缩多。 笑死,一個胖子當著我的面吹牛养晋,可吹牛的內容都是我干的衬吆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绳泉,長吁一口氣:“原來是場噩夢啊……” “哼逊抡!你這毒婦竟也來了?” 一聲冷哼從身側響起零酪,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤冒嫡,失蹤者是張志新(化名)和其女友劉穎麦射,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體灯谣,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡潜秋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了胎许。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峻呛。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辜窑,靈堂內的尸體忽然破棺而出钩述,到底是詐尸還是另有隱情,我是刑警寧澤穆碎,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布牙勘,位于F島的核電站,受9級特大地震影響所禀,放射性物質發(fā)生泄漏方面。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一色徘、第九天 我趴在偏房一處隱蔽的房頂上張望恭金。 院中可真熱鬧,春花似錦褂策、人聲如沸横腿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耿焊。三九已至,卻和暖如春遍搞,著一層夾襖步出監(jiān)牢的瞬間罗侯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工尾抑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留歇父,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓再愈,卻偏偏與公主長得像榜苫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子翎冲,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容

  • 1垂睬、非對稱加密(現代加密算法):RSA(不適合加密大數據)、ECC2、對稱加密(傳統(tǒng)加密算法):DES驹饺、3DES钳枕、...
    Code_人生閱讀 539評論 0 1
  • Hash Hash,一般翻譯做散列赏壹、雜湊鱼炒,或音譯為哈希,是把任意長度的輸入(又叫做預映射pre-image)通過散...
    HLjane_閱讀 612評論 0 0
  • HSAH Hash蝌借,一般翻譯做“散列”昔瞧,也有直接音譯為“哈希”的菩佑,就是把任意長度的輸入通過散列算法變換成固定長度的...
    JoyChenSeven閱讀 1,241評論 0 0
  • HASH概述: Hash自晰,一般翻譯做“散列”,也有直接音譯為“哈仙耘鳎”的酬荞,就是把任意長度的輸入通過散列算法變換成固定...
    簡_愛SimpleLove閱讀 789評論 0 0
  • 一、hash 1. 什么是hash瞧哟? Hash混巧,一般翻譯做“散列”,也有直接音譯為“哈暇钗校”的牲剃,就是把任意長度的輸入...
    我是好寶寶_6966閱讀 1,179評論 0 1