密碼學之雜湊

2021-08-08 03:04:45 字數 3426 閱讀 7090

【雜湊(雜湊函式)】

md5

sha1

sha256(512)

【對稱加密演算法】

des

3des

aes(高階密碼標準,美國****局使用的加密演算法)

ps:蘋果內部的鑰匙串訪問用的就算aes。

【非對稱加密演算法 】

rsa1、資料不可反算(不可逆運算)。

2、演算法公開。

3、對相同的資料加密,得到的結果是一樣的。

4、對不同的資料加密得到的結果是定長。 (md5 -> 32個字元。10g電影->32個字元)

5、資訊摘要,資訊「指紋」。

伺服器的邏輯:

1、伺服器只會儲存使用者加密之後的32位的字串!!

2、伺服器在使用者註冊的那一刻就儲存了明文密碼加密之後的字串!!

如果伺服器儲存的原始密碼,請啪啪打臉你們的後台。

方法一:直接md5加密

**進行加密

終端進行加密

pwd = pwd.md5string
24萬億條資料來給你對比。

方法二:加鹽

早期的一種方式。

鹽要足夠複雜。(shift+數字鍵盤,胡亂的拍~)

拼接字串加鹽,然後md5,就相對比較安全。

static nsstring * salt = @"lkajsd;flj)(*@$!#(*&ojkd(*&)291iojpoihoids@#$u(*)_q#r()ijd*(f_u";
但是有個問題哈,如果某一天這個程式設計師搞事情,有矛盾,這哥們把鹽洩露了。就gg了。

那你說,離職了改鹽啊,那你低版本的使用者請問如何登入?

強制使用者都重置密碼啊!

那你就666了。

所以說鹽一旦寫死,就不可更改了。

方式三:hmac加密

目前非常流行,而且很多大公司在用。

使用乙個金鑰加密,做兩次雜湊!

pwd = [pwd hmacmd5stringwithkey:@"key"];
在真實的開發中,這個key從伺服器獲取。

啥時候獲取?

獲取驗證碼返回或者登入前多做一次網路請求啊,根據需求來搞。

【使用hmac加密的流程】

註冊:

1、傳送賬號給伺服器。

2、然後伺服器隨機生成乙個金鑰key返回給客戶端。

3、客戶端把這個key儲存在本地。(推薦鑰匙串)

4、輸入密碼 hmac加密,伺服器儲存乙個密碼。

換了手機後:

1、先判斷本地有沒有金鑰。

2、沒有金鑰,伺服器返回金鑰

那麼就會出現個問題,我每次拿個新手機,登入下別的手機號,你就把金鑰給我豈不是不安全?然後我再拼拼湊湊密碼,試一試,搞一搞。

所以,類似於裝置鎖的東西就出來了。

裝置鎖的問題:

用了新手機,伺服器向老裝置傳送請求,是否同意新手機登入,同意了,後台給新裝置傳送key。這樣就可以大部分的避免胡亂下發key。

如果沒有類似裝置鎖的東西,可以通過手機驗證碼,郵箱等等,確定是否傳送key給新裝置。

總之,下面驗證這步,要盡量安全就可以了。

【有些黑客是攔截網路請求,不需要知道你的real pwd,而是模擬登入進行操作。】

我們的目標:每次登入的請求的字串都不一樣!!!

//密碼hmac + 時間 ,然後md5

(密碼.hmac + "201703182138" ).md5

請求的時候,一般都是返回伺服器的時間戳。避免使用者手機時間不對。

在合適的地方網路請求得到伺服器的時間。

伺服器儲存的是密碼.hmac

然後後台對比現在的時間,然後.md5

如果現在對比不成功,繼續對比上一次的時間 然後.md5

對比兩次是留下網路延遲的時間。

兩次驗證都不成功,則失敗。

黑客一般都是獲取了大量的使用者資料後,統一進行破解操作,所以加個時間限制,更安全。

在使用搜尋引擎的時候,幾個關鍵字不管我們如何顛倒關鍵字,得到的搜尋的結果都是一致的。

原理:

比方說,搜尋的時候,有兩個關鍵字 a & b。

不管a和b的位置如何,只要a 的md5值 和b的md5值 相加,和是一樣的,搜尋出來的結果就是一樣的。

a + b = b + a = result

雖然二者看起來差不多,肉眼不那麼容易識別,但是正版a和盜版b的md5值是完全不同的。(和檔名無關、和字尾名無關)

md5是根據檔案內容的二進位制進行加密的,但是檔案內容稍微有些不同,md5後的結果也是非常大的。所以通過md5後的結果很容易看出來哪個是假的。

但是如果是複製,把磁碟的二進位制進行複製,得到的內容是一致的,這個時候就判斷不出來了。但是我們市面看的都是作者原始檔進行更改後發布的,原始檔是進行備案的,所以原始檔只有作者知道。只要對比md5,和備案的一匹配結果就出來了。

tips:

檔案壓縮後,md5的值是不一樣的。

解壓縮後,md5的值和原始檔是一樣的。

原理:

對比檔案的md5值!!只要二者檔案的md5值相同,就會秒傳。

如何更改檔案的md5值呢?

方法1、壓縮一下。你的md5值就變了。

方法2、採取一種編碼方式改變md5。

推薦用base64(base64是可以反算的)。

base64 皮卡丘.png -o 羋月傳.txt

base64 羋月傳.txt -o 皮卡丘.png -d

如果我們想儲存我們個人比較安全的資料,我們可以自定義個演算法,修改這個羋月傳.txt裡面的內容,然後儲存。

取出的時候,運用這個演算法,得到正確的羋月傳.txt內容,然後base64回來原來的皮卡丘.png.

檢視檔案的md5值。

wiks-air

:desktop

wiki

/desktop/ios新技術.png) = 7e2c1e5a0f19a301902465cf2f362716

wiks-air

:desktop

wiki

$ md5 ios新技術.png

md5 (ios新技術.png) = 7e2c1e5a0f19a301902465cf2f362716

閒談:是否可以用指紋登陸?

當然不可以啦!

指紋:判斷這個人是否是手機的主人

密碼:判斷這個人是否是賬號的主人

雜湊函式密碼學

鏈客,有問必答!雜湊函式是密碼學中的乙個重要分支,該函式是一類數學函式,它可以在有限的合理時間內,將任意長度的訊息變換成固定長度的二進位制串,且不可逆,這個輸出值就是雜湊值,也叫雜湊值或訊息摘要。以hash函式為基礎的hash演算法,在數字簽名,實現資料完整性,merkle樹資料儲存和檢索等方面有著...

雜湊函式密碼學

鏈客,有問必答!雜湊函式是密碼學中的乙個重要分支,該函式是一類數學函式,它可以在有限的合理時間內,將任意長度的訊息變換成固定長度的二進位制串,且不可逆,這個輸出值就是雜湊值,也叫雜湊值或訊息摘要。以hash函式為基礎的hash演算法,在數字簽名,實現資料完整性,merkle樹資料儲存和檢索等方面有著...

密碼學 雜湊演算法

在日常生活中,每個人去銀行 坐火車都需要身份證證明自己的身份。身份證存在的目的就是要證明我真的是我。同樣在網路中,乙個檔案是否被改過 更改之後就是新的檔案 需要乙個 身份證 證明,這裡就需要了 hash 演算法了。為了滿足上述要求,需要 hash 演算法滿足如下特點 1 md5,即 message ...