-
單向散列函數的說明
- 單向散列函數也稱為消息摘要函數, 哈希函數 或者 雜湊函數
- 單向散列函數輸出的散列值又稱為消息摘要 或者 指紋
-
經典算法
單項散列函數的經典算法,包括 : MD4\MD5\SHA1\SHA256\SHA512等 -
單向散列函數的特點:
- 加密后密文的長度是定長的(即對任意長度的消息三列,得到的散列值是定長的)
- 散列計算速度快,非常高效
- 如果明文不一樣,那么散列后的結果一定不一樣
- 如果明文一樣,那么加密后的密文一定一樣(對相同數據加密,加密后的密文一樣)
- 所有的加密算法是公開的
- 具備單向性,不可以逆推反算
MD5
加密算法說明
MD5全稱是Message Digest Algorithm 5,譯為"消息摘要算法第5版"是由Rivest 于1991年設計的單項散列函數MD5的特點
1)對字符串進行MD5加密可以得到一個32個字符的密文
對輸入的信息生成唯一的一個128位散列值(32個字符)
2)加密之后不能根據密文逆推出明文
根據輸出值,不能得到原始的明文,即其過程不可逆
明文不同,則散列值一定不同
明文相同,則散列值一定相同
3)MD5已經被破解(暴力破解|碰撞檢測)
1)MD5解密網站:http://www.cmd5.com
2)MD5的強抗碰撞性已經被證實攻破,即對于重要數據不應該再繼續使用MD5加密。-
提交隱私數據的安全過程 - 注冊
注冊 -
提交隱私數據的安全過程 - 登錄
登錄
結論:用戶的隱私數據,只有在用戶輸入那一刻是明文,其他情況都是密文處理 -
消息認證碼
-
消息認證碼特點
①消息的發送者和接收者有一個共享密鑰
②發送者使用共享密鑰對消息加密計算得到MAC值(消息認證碼)
③消息接收者使用共享密鑰對消息加密計算得到MAC值
④比較兩個MAC值是否一致 -
經典算法
①HMAC-MD5(先用密鑰加密,然后進行兩次散列計算)
②HMAC-SHA1 -
使用
①客戶端需要在發送的時候把(消息)+(消息·HMAC)一起發送給服務器
②服務器接收到數據后,對拿到的消息用共享的KEY進行HMAC,比較是否一致,如果一致則信任
消息認證流程示意圖
-
消息認證碼特點
MD5加密進階
**注意 : **現在的MD5已不再是絕對安全,對此,可以對MD5稍作改進,以增加解密的難度
- 加鹽(Salt):在明文的固定位置插入隨機串,然后再進行MD5加密
MD5進階的加密方式 - 先加密,后亂序:先對明文進行MD5,然后對加密得到的MD5串的字符進行亂序
- 先亂序,后加密:先對明文字符串進行亂序處理,然后對得到的串進行加密
- 先亂序,再加鹽,再多次MD5加密等
- 使用消息認證機制,即HMAC-MD5-先對密鑰進行加密,加密之后進行兩次MD5散列
總之宗旨就是:黑客就算攻破了數據庫,也無法解密出正確的明文 - 終端命令行加密
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 是一個秘鑰(服務器發送過來的隨機數)
NSString * key = @"love";
NSString * str6 = [str hmacMD5StringWithKey:key];
NSLog(@"%@",str6);
- MD5加密的安全等級
加密方式 用戶的輸入 發送給服務器的數據(攔截) 安全風險
MD5 handsome 21bfcc4c2625469d8ec6f3d710dcb0fe 低
MD5_MD5 handsome SEEFRSFSTSTSTSTSTSTSTSTSTSTSTSTS 低
(字符串+salt)_MD5 handsome 6e3a6f5e426e7876215463e0277de4b7 ->handsomeabc 高
... 123456 df10ef8509dc176d733d59549e7dbfaf ->123456abc
(字符串+亂序)_MD5 handsome c1e8a4de626d2dd197cbfea2a3171250 ->somehand 很高
12345 erwrwrwrtwrdwdwdwdwdwdwdwdwdwdq ->45123