標籤:alt 字串轉換 ash 文字檔 用戶端 完整 著作權 osal 私密金鑰
1、資料安全:
1.01 攻城利器:Charles(公司中一般都使用該工具來抓包,並做網路測試)
2.注意:Charles在使用中的亂碼問題,可以顯示包內容,然後開啟info.plist檔案,找到java目錄下面的VMOptions,在後面添加一項:-Dfile.encoding=UTF-8
3.02 資料安全的原則
4. 1)在網路上"不允許"傳輸使用者隱私資料的"明文"
5. 2.)在本地"不允許"儲存使用者隱私資料的"明文"
6.03 資料加密的方式和規範一般公司會有具體的規定,不必多花時間。
2、Base64
1.1.Base64簡單說明
2. 描述:Base64可以成為密碼學的基石,非常重要。
3. 特點:可以將任意的位元據進行Base64編碼
4. 結果:所有的資料都能被編碼為並只用65個字元就能表示的文字檔。
5. 65字元:A~Z a~z 0~9 + / =
6. 對檔案進行base64編碼後檔案資料的變化:編碼後的資料~=編碼前資料的4/3,會大1/3左右。
7.
8.2.命令列進行Base64編碼和解碼
9. 編碼:base64 123.png -o 123.txt
10. 解碼:base64 123.txt -o test.png -D
11.
12.2.Base64編碼原理
13. 1)將所有字元轉化為ASCII碼;
14. 2)將ASCII碼轉化為8位二進位;
15. 3)將二進位3個歸成一組(不足3個在後邊補0)共24位,再拆分成4組,每組6位;
16. 4)統一在6位二進位前補兩個0湊足8位;
17. 5)將補0後的二進位轉為十進位;
18. 6)從Base64編碼錶擷取十進位對應的Base64編碼;
19.
20.處理過程說明:
21. a.轉換的時候,將三個byte的資料,先後放入一個24bit的緩衝區中,先來的byte占高位。
22. b.資料不足3byte的話,於緩衝區中剩下的bit用0補足。然後,每次取出6個bit,按照其值選擇查表選擇對應的字元作為編碼後的輸出。
23. c.不斷進行,直到全部輸入資料轉換完成。
24. d.如果最後剩下兩個輸入資料,在編碼結果後加1個“=”;
25. e.如果最後剩下一個輸入資料,編碼結果後加2個“=”;
26. f.如果沒有剩下任何資料,就什麼都不要加,這樣才可以保證資料還原的正確性。
27.
28.3.實現
29. a.說明:
30. 1)從iOS7.0 開始,蘋果就提供了base64的編碼和解碼支援
31. 2)如果是老項目,則還能看到base64編碼和解碼的第三方架構,如果當前不再支援iOS7.0以下版本,則建議替換。
32.
33. b.相關代碼:
34. //給定一個字串,對該字串進行Base64編碼,然後返回編碼後的結果
35. -(NSString *)base64EncodeString:(NSString *)string
36. {
37. //1.先把字串轉換為位元據
38. NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
39.
40. //2.對位元據進行base64編碼,返回編碼後的字串
41. return [data base64EncodedStringWithOptions:0];
42. }
43.
44. //對base64編碼後的字串進行解碼
45. -(NSString *)base64DecodeString:(NSString *)string
46. {
47. //1.將base64編碼後的字串『解碼』為位元據
48. NSData *data = [[NSData alloc]initWithBase64EncodedString:string options:0];
49.
50. //2.把位元據轉換為字串返回
51. return [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
52. }
53.
54. c.終端測試命令
55. $ echo -n A | base64
56. $ echo -n QQ== |base64 -D
3、常見的密碼編譯演算法和其它:
1.1. base64 編碼格式
2.2. 密碼學演化 "秘密本"-->RSA
3.3. 常見的密碼編譯演算法
4. 1)訊息摘要(單向散列函數)
5. 2)對稱式加密
6. 3)非對稱式加密
7. 4)認證等
4、單向散列函數:
1.1.單向散列函數的特點:
2. ①加密後密文的長度是定長的
3. ②如果明文不一樣,那麼散列後的結果一定不一樣
4. ③如果明文一樣,那麼加密後的密文一定一樣(對相同資料加密,加密後的密文一樣)
5. ④所有的密碼編譯演算法是公開的
6. ⑤不可以逆推反算
7.2.經典密碼編譯演算法
8. 1)MD5加密
9. 2)SHA1
10. 3)SHA512
11.3.MD5密碼編譯演算法簡單說明
12. 1)對字串進行MD5加密可以得到一個32個字元的密文
13. 2)加密之後不能根據密文逆推出明文
14. 3)MD5已經被破解(暴力破解|碰撞檢測)
15.4.MD5加密進階
16. 1)先加鹽,然後再進行MD5
17. 2)先亂序,再進行MD5加密
18. 3)亂序|加鹽,多次MD5加密等
19. 4)使用訊息認證機制,即HMAC-MD5-先對密鑰進行加密,加密之後進行兩次MD5散列
20. 5)加密命令列
21. MD5加密-字串 $ echo -n "520it" |md5
22. MD5加密-檔案1 $ md5 abc.png
23. SHA1加密: $ echo -n "520it" |openssl sha -sha1
24. SHA256 $ echo -n "520it" |openssl sha -sha256
25. SHA512 $ echo -n "520it" |openssl sha -sha512
26. hmacMD5加密 $ echo -n "520it" |openssl dgst -md5 -hmac "123"
27.
28.5.散列函數應用領域
29. 1)搜尋 多個關鍵字,先對每個關鍵字進行散列,然後多個關鍵字進行或運算,如果值一致則搜尋結果一致
30. 2)著作權 對檔案進行散列判斷該檔案是否是正版或原版的
31. 3)檔案完整性驗證 對整個檔案進行散列,比較散列值判斷檔案是否完整或被篡改
32.6.訊息認證機制(HMAC)簡單說明
33. 1)原理
34. ①訊息的寄件者和接收者有一個共用密鑰
35. ②寄件者使用共用金鑰組訊息加密計算得到MAC值(訊息認證碼)
36. ③訊息接收者使用共用金鑰組訊息加密計算得到MAC值
37. ④比較兩個MAC值是否一致
38. 2)使用
39. ①用戶端需要在發送的時候把(訊息)+(訊息·HMAC)一起發送給伺服器
40. ②伺服器接收到資料後,對拿到的訊息用共用的KEY進行HMAC,比較是否一致,如果一致則信任
5、對稱式加密:
1.1.對稱式加密的特點
2. 1)加密/解密使用相同的密鑰
3. 2)加密和解密的過程是可逆的(明文-》密文-》明文)
1.2.經典演算法
2. 1)DES 資料加密標準
3. 2)3DES 使用3個密鑰,對訊息進行(密鑰1·加密)+(密鑰2·解密)+(密鑰3·加密)
4. 3)AES 進階加密標準
5.3.分組密碼簡單說明
6. 密碼演算法可以分為分組密碼和流密碼兩種。
7. 分組密碼:每次只能處理特定長度的一zu資料的一類密碼演算法。一個分組的位元數量就稱之為分組長度。
8. ex:DES和3DES的分組長度都是64位元。即每次只能加密64位元的明文,並產生64位元的密文。AES的分組長度有128位元、192位元和256位元可以選擇。
9. 流密碼:對資料流進行連續處理的一類演算法。流密碼中一般以1位元、8位元或者是32位元等作為單位倆進行加密和解密。
10.4.ECB分組模式
11. ECB模式的全稱為Electronic CodeBook模式。又成為電子密碼本模式。
12. 特點:
13. 1)使用ECB模式加密的時候,相同的明文分組會被轉換為相同的密文分組。
14. 2)類似於一個巨大的明文分組-》密文分組的對照表。
1. 終端測試命令:
2. 加密 $ openssl enc -des-ecb -K 616263 -nosalt -in 123.txt -out 123.bin
3. 解密 $ openssl enc -des-ecb -K 616263 -nosalt -in 123.bin -out 1231.txt -d
4.5.CBC分組模式
5. CBC模式全稱為Cipher Block Chainning模式(密文分組連結模式|電子密碼鏈條)
6. 特點:在CBC模式中,首先將明文分組與前一個密文分組進行XOR運算,然後再進行加密。
1. 終端命令:
2. 加密 $ openssl enc -des-cbc -K 616263 -iv 0102030405060708 -nosalt -in a.txt -out a.bin
3. 解密 $ openssl enc -des-cbc -K 616263 -iv 0102030405060708 -nosalt -in a.bin -out a1.txt -d
6、非對稱式加密:
1.1.非對稱式加密的特點
2. 1)使用公開金鑰加密,使用私密金鑰解密
3. 2)公開金鑰是公開的,私密金鑰保密
4. 3)加密處理安全,但是效能極差
1.2.經典演算法---RSA
2. 1)RSA 原理
3. (1)求N,準備兩個質數p和q,N = p x q
4. (2)求L,L是p-1和q-1的最小公倍數。L = lcm(p-1,q-1)
5. (3)求E,E和L的最大公約數為1(E和L互質)
6. (4)求D,E x D mode L = 1
7. 2)RSA加密小實踐
8. (1)p = 17,q = 19 =>N = 323
9. (2)lcm(p-1,q-1)=>lcm(16,18)=>L= 144
10. (3)gcd(E,L)=1 =>E=5
11. (4)E乘以幾可以mode L =1? D=29可以滿足
12. (5)得到公開金鑰為:E=5,N=323
13. (6)得到私密金鑰為:D=29,N=323
14. (7)加密 明文的E次方 mod N = 123的5次方 mod 323 = 225(密文)
15. (8)解密 密文的D次方 mod N = 225的29次方 mod 323 = 123(明文)
16. ----------------
17. 3)openssl產生密鑰命令
18. 產生強度是 512 的 RSA 私密金鑰:$ openssl genrsa -out private.pem 512
19. 以明文輸出私密金鑰內容:$ openssl rsa -in private.pem -text -out private.txt
20. 校正私密金鑰檔案:$ openssl rsa -in private.pem -check
21. 從私密金鑰中提取公開金鑰:$ openssl rsa -in private.pem -out public.pem -outform PEM -pubout
22. 以明文輸出公開金鑰內容:$ openssl rsa -in public.pem -out public.txt -pubin -pubout -text
23. 使用公開金鑰加密小檔案:$ openssl rsautl -encrypt -pubin -inkey public.pem -in msg.txt -out msg.bin
24. 使用私密金鑰解密小檔案:$ openssl rsautl -decrypt -inkey private.pem -in msg.bin -out a.txt
25. 將私密金鑰轉換成 DER 格式:$ openssl rsa -in private.pem -out private.der -outform der
26. 將公開金鑰轉換成 DER 格式:$ openssl rsa -in public.pem -out public.der -pubin -outform der
27. -----------------
7、數位簽章:
1.1.數位簽章的應用情境
2. 答:需要嚴格驗證發送方身份資訊情況
3.2.數位簽章原理
4. 1)用戶端處理
5. ①對"訊息"進行 HASH 得到 "訊息摘要"
6. ②發送方使用自己的私密金鑰對"訊息摘要" 加密(數位簽章)
7. ③把數位簽章附著在"報文"的末尾一起發送給接收方
8. 2)服務端處理
9. ①對"訊息" HASH 得到 "報文摘要"
10. ②使用公開金鑰對"數位簽章" 解密
11. ③對結果進行匹配
12.
8、數位憑證:
1.1.簡單說明
2. 認證和駕照很相似,裡面記有姓名、組織、地址等個人資訊,以及屬於此人的公開金鑰,並有認證機構施加數位簽章,只要看到密鑰憑證,我們就可以知道認證機構認證該公開金鑰的確屬於此人
3.2.數位憑證的內容
4. 1)公開金鑰
5. 2)認證機構的數位簽章
6.3.認證的產生步驟
7. 1)產生私密金鑰 openssl genrsa -out private.pem 1024
8. 2)建立認證請求 openssl req -new -key private.pem -out rsacert.csr
9. 3)產生認證並簽名,有效期間10年 openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
10. 4)將 PEM 格式檔案轉換成 DER 格式 openssl x509 -outform der -in rsacert.crt -out rsacert.der
11. 5)匯出P12檔案 openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
12.
13.4.iOS開發中的注意點
14. 1)在iOS開發中,不能直接使用 PEM 格式的認證,因為其內部進行了Base64編碼,應該使用的是DER的認證,是二進位格式的
15. 2)OpenSSL預設產生的都是PEM格式的認證
iOS核心筆記——網路編程-網路安全