-
單向散列函數(shù)的說明
- 單向散列函數(shù)也稱為消息摘要函數(shù), 哈希函數(shù) 或者 雜湊函數(shù)
- 單向散列函數(shù)輸出的散列值又稱為消息摘要 或者 指紋
-
經(jīng)典算法
單項散列函數(shù)的經(jīng)典算法,包括 : MD4\MD5\SHA1\SHA256\SHA512等 -
單向散列函數(shù)的特點:
- 加密后密文的長度是定長的(即對任意長度的消息三列,得到的散列值是定長的)
- 散列計算速度快,非常高效
- 如果明文不一樣自阱,那么散列后的結果一定不一樣
- 如果明文一樣梯影,那么加密后的密文一定一樣(對相同數(shù)據(jù)加密矾削,加密后的密文一樣)
- 所有的加密算法是公開的
- 具備單向性,不可以逆推反算
MD5
加密算法說明
MD5全稱是Message Digest Algorithm 5,譯為"消息摘要算法第5版"是由Rivest 于1991年設計的單項散列函數(shù)MD5的特點
1)對字符串進行MD5加密可以得到一個32個字符的密文
對輸入的信息生成唯一的一個128位散列值(32個字符)
2)加密之后不能根據(jù)密文逆推出明文
根據(jù)輸出值秽之,不能得到原始的明文吵聪,即其過程不可逆
明文不同,則散列值一定不同
明文相同,則散列值一定相同
3)MD5已經(jīng)被破解(暴力破解|碰撞檢測)
1)MD5解密網(wǎng)站:http://www.cmd5.com
2)MD5的強抗碰撞性已經(jīng)被證實攻破捻爷,即對于重要數(shù)據(jù)不應該再繼續(xù)使用MD5加密。-
提交隱私數(shù)據(jù)的安全過程 - 注冊
注冊 -
提交隱私數(shù)據(jù)的安全過程 - 登錄
登錄
結論:用戶的隱私數(shù)據(jù)份企,只有在用戶輸入那一刻是明文也榄,其他情況都是密文處理 -
消息認證碼
-
消息認證碼特點
①消息的發(fā)送者和接收者有一個共享密鑰
②發(fā)送者使用共享密鑰對消息加密計算得到MAC值(消息認證碼)
③消息接收者使用共享密鑰對消息加密計算得到MAC值
④比較兩個MAC值是否一致 -
經(jīng)典算法
①HMAC-MD5(先用密鑰加密,然后進行兩次散列計算)
②HMAC-SHA1 -
使用
①客戶端需要在發(fā)送的時候把(消息)+(消息·HMAC)一起發(fā)送給服務器
②服務器接收到數(shù)據(jù)后司志,對拿到的消息用共享的KEY進行HMAC甜紫,比較是否一致降宅,如果一致則信任
消息認證流程示意圖
-
消息認證碼特點
MD5加密進階
**注意 : **現(xiàn)在的MD5已不再是絕對安全,對此囚霸,可以對MD5稍作改進钉鸯,以增加解密的難度
- 加鹽(Salt):在明文的固定位置插入隨機串,然后再進行MD5加密
MD5進階的加密方式 - 先加密邮辽,后亂序:先對明文進行MD5唠雕,然后對加密得到的MD5串的字符進行亂序
- 先亂序,后加密:先對明文字符串進行亂序處理吨述,然后對得到的串進行加密
- 先亂序岩睁,再加鹽,再多次MD5加密等
- 使用消息認證機制揣云,即HMAC-MD5-先對密鑰進行加密捕儒,加密之后進行兩次MD5散列
總之宗旨就是:黑客就算攻破了數(shù)據(jù)庫,也無法解密出正確的明文 - 終端命令行加密
MD5加密-字符串 $ echo -n "520it" |md5
MD5加密-文件1 $ md5 abc.png
SHA1加密: $ echo -n "520it" |openssl sha -sha1
SHA256 $ echo -n "520it" |openssl sha -sha256
SHA512 $ echo -n "520it" |openssl sha -sha512
hmacMD5加密 $ echo -n "520it" |openssl dgst -md5 -hmac "123"
- MD5的應用
- 加密
- 搜索 : 多個關鍵字邓夕,先對每個關鍵字進行散列刘莹,然后多個關鍵字進行或運算,如果值一致則搜索結果一致
- 文件完整性驗證 : 對整個文件進行散列焚刚,比較散列值判斷文件是否完整或被篡改
- 版權 : 對文件進行散列判斷該文件是否是正版或原版的
-
MD5加密示例代碼
方式一:直接加密
NSString * str = @"ZhaoJing";
NSString * str1 = [str md5String];
NSLog(@"%@",str1);
方式二:通過加鹽的方式加密
//說明:鹽要足夠的長,足夠的復雜,這樣加密后的安全性更高
NSString * salt = @"ahfqjhfguyrgflhfvagfliergflaigalgLAGFLAFLiglGLglIGLIgLGLEGLiwgf";
NSString * str2 = [str stringByAppendingString:salt];
NSString * str3 = [str2 md5String];
NSLog(@"%@",str3);
方式三:通過顛倒前后字符的位置(亂序)
NSString * lastStr = [str substringFromIndex:4];
NSString * firstStr = [str substringToIndex:4];
NSString * str4 = [lastStr stringByAppendingString:firstStr];
NSString * str5 = [str4 md5String];
NSLog(@"%@",str5);
方式四:消息摘要認證 HAMC-MD5
//key 是一個秘鑰(服務器發(fā)送過來的隨機數(shù))
NSString * key = @"love";
NSString * str6 = [str hmacMD5StringWithKey:key];
NSLog(@"%@",str6);
- MD5加密的安全等級
加密方式 用戶的輸入 發(fā)送給服務器的數(shù)據(jù)(攔截) 安全風險
MD5 handsome 21bfcc4c2625469d8ec6f3d710dcb0fe 低
MD5_MD5 handsome SEEFRSFSTSTSTSTSTSTSTSTSTSTSTSTS 低
(字符串+salt)_MD5 handsome 6e3a6f5e426e7876215463e0277de4b7 ->handsomeabc 高
... 123456 df10ef8509dc176d733d59549e7dbfaf ->123456abc
(字符串+亂序)_MD5 handsome c1e8a4de626d2dd197cbfea2a3171250 ->somehand 很高
12345 erwrwrwrtwrdwdwdwdwdwdwdwdwdwdq ->45123