iOS安全之HASH加密

HASH

現(xiàn)在在處理App的用戶敏感信息方面,大部分都是采用HASH加密的方式來進行處理。

1、HASH的概念

Hash,一般翻譯做“散列”,也有直接音譯為“哈?!钡?,就是把任意長度的輸入通過散列算法變換成固定長度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來確定唯一的輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數(shù)。

2、HASH的特點

? 算法是公開的

? 對相同數(shù)據(jù)運算,得到的結(jié)果是一樣的

? 對不同數(shù)據(jù)運算,如MD5得到的結(jié)果默認(rèn)是128位,32個字符(16進制標(biāo)識)。

? 沒法進行逆運算

? 信息摘要,信息“指紋”,是用來做數(shù)據(jù)識別的。

3、HASH的用途

? 用戶密碼的加密

? 搜索引擎

? 版權(quán)

? 數(shù)字簽名

密碼加密處理

1、直接使用md5


    //密碼

    NSString* pwd =@"123456";

    //MD5 直接加密 e10adc3949ba59abbe56e057f20f883e

    //不足:不夠安全了??梢苑床樵?!

    pwd = pwd.md5String;

2、md5+salt方式


    //MD5 加鹽

    //弊端: 鹽是固定的,寫死在程序里面,一旦泄露就不安全了!

    static NSString * salt = @"67%^&^ffhjgjkHD";

    pwd = [pwd stringByAppendingString:salt].md5String;

3、HMAC方式加密


    /** HMAC

     *  使用一個密鑰加密,并且做兩次散列!

     *  在實際開發(fā)中,密鑰(KEY)來自于服務(wù)器(動態(tài)的)!

     *  一個賬號,對應(yīng)一個KEY,而且還可以跟新!

     */

    NSString*serverKey =@"chh";

    pwd = [pwd hmacMD5StringWithKey:serverKey];

4、HMAC方式優(yōu)化


     /** HMAC優(yōu)化

      * 由于直接一直使用HMAC的話,容易被逆向獲取HMAC,

      * 所以考慮在傳輸HMAC的前向服務(wù)器請求時間戳(忽略秒),

      * 然后在HMAC基礎(chǔ)上加上服務(wù)器的時間戳并進行md5加密后進行傳輸 

      * 服務(wù)器存儲的是HMAC(密碼+KEY)的值和KEY,key用于返給客戶端,校驗的時候只需拿HMAC這個值再加上時間戳進行MD5進行比較

     */

    pwd = [[pwd hmacMD5StringWithKey:serverKey] stringByAppendingString:@"服務(wù)器時間戳"].md5String;

數(shù)字簽名

數(shù)字簽名本質(zhì)上是通過HASH算法和RSA加密來實現(xiàn)的。

HASH算法專門用來做文件數(shù)據(jù)的識別.那么在網(wǎng)絡(luò)數(shù)據(jù)傳遞的過程中,我們可以將明文數(shù)據(jù),和數(shù)據(jù)的HASH值一起傳遞給對方.對方可以拿出HASH值來進行驗證。

但是在這個過程中,如何做到數(shù)據(jù)的保護呢?明文數(shù)據(jù)和HASH值如果直接傳遞就有都被篡改的風(fēng)險.所以這里我們要對數(shù)據(jù)進行加密。明文數(shù)據(jù)有時會比較大,不適合使用RSA非對稱加密算法,那么數(shù)據(jù)的HASH值是比較小的。這個數(shù)據(jù)是用于校驗的,它完全可以使用RSA來加密。所以在數(shù)據(jù)傳遞的時候,我們將明文數(shù)據(jù)加上通過RSA加密的校驗數(shù)據(jù)一并傳遞給對方。那么這個通過RSA加密的校驗數(shù)據(jù),我們稱之為簽名.

生成數(shù)字簽名

驗證數(shù)字簽名

當(dāng)對方拿到數(shù)據(jù)之后,如何進行驗證呢?

首先傳遞數(shù)據(jù)時會將原始的數(shù)據(jù)和數(shù)字簽名一起發(fā)送

對方拿到數(shù)據(jù)后,先進行校驗,拿到原始數(shù)據(jù),通過同樣的HASH算法得到數(shù)據(jù)的HASH值。

然后通過非對稱加密,將數(shù)字簽名中的校驗HASH值解密出來。

最后對比兩個HASH值是否一致,這樣可以很好的判斷數(shù)據(jù)是否被篡改。

驗證數(shù)字簽名
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這篇文章主要講述在Mobile BI(移動商務(wù)智能)開發(fā)過程中,在網(wǎng)絡(luò)通信、數(shù)據(jù)存儲、登錄驗證這幾個方面涉及的加密...
    雨_樹閱讀 3,043評論 0 6
  • Hash 算法與數(shù)字摘要 Hash (哈希或散列)算法它能將任意長度的二進制明文串映射為較短的(通常是固定長度的)...
    你看我像豆子嘛閱讀 1,313評論 0 2
  • 背景 ? 隨著移動互聯(lián)網(wǎng)的普及,被越來越多的心懷不軌的人覬覦,也越來越多的安全問題暴露了出來。開發(fā)者開發(fā)出來的應(yīng)用...
    陵無山閱讀 3,113評論 1 13
  • 很想寫些什么,但對著手機,一本正經(jīng)的準(zhǔn)備寫的時候才發(fā)覺自己不知道從何寫起。 三年的全職媽媽我算是熬過來了,...
    會飛的小老鼠閱讀 176評論 0 0
  • 夢里一樹 紅花紅果 愛戀的她 身著他愛的紅 她想他會如約 會在約定的時間 在那山楂樹下為她別上紅花 只因他曾許諾:...
    極度差閱讀 247評論 3 5

友情鏈接更多精彩內(nèi)容