數(shù)據(jù)安全以及加密

1.數(shù)據(jù)安全

01 攻城利器:Charles(公司中一般都使用該工具來抓包,并做網(wǎng)絡測試)
注意:Charles在使用中的亂碼問題,可以顯示包內(nèi)容,然后打開info.plist文件,找到java目錄下面的VMOptions,在后面添加一項:-Dfile.encoding=UTF-8
02 數(shù)據(jù)安全的原則
    1)在網(wǎng)絡上"不允許"傳輸用戶隱私數(shù)據(jù)的"明文"
    2.)在本地"不允許"保存用戶隱私數(shù)據(jù)的"明文"
03 數(shù)據(jù)加密的方式和規(guī)范一般公司會有具體的規(guī)定,不必多花時間。

2.Base64

1.Base64簡單說明
    描述:Base64可以成為密碼學的基石,非常重要。
    特點:可以將任意的二進制數(shù)據(jù)進行Base64編碼
    結(jié)果:所有的數(shù)據(jù)都能被編碼為并只用65個字符就能表示的文本文件。
    65字符:A~Z a~z 0~9 + / =
    對文件進行base64編碼后文件數(shù)據(jù)的變化:編碼后的數(shù)據(jù)~=編碼前數(shù)據(jù)的4/3,會大1/3左右。

2.命令行進行Base64編碼和解碼
    編碼:base64 123.png -o 123.txt
    解碼:base64 123.txt -o test.png -D

2.Base64編碼原理
    1)將所有字符轉(zhuǎn)化為ASCII碼;
    2)將ASCII碼轉(zhuǎn)化為8位二進制;
    3)將二進制3個歸成一組(不足3個在后邊補0)共24位,再拆分成4組,每組6位;
    4)統(tǒng)一在6位二進制前補兩個0湊足8位;
    5)將補0后的二進制轉(zhuǎn)為十進制;
    6)從Base64編碼表獲取十進制對應的Base64編碼;

處理過程說明:
    a.轉(zhuǎn)換的時候,將三個byte的數(shù)據(jù),先后放入一個24bit的緩沖區(qū)中,先來的byte占高位。
    b.數(shù)據(jù)不足3byte的話,于緩沖區(qū)中剩下的bit用0補足。然后,每次取出6個bit,按照其值選擇查表選擇對應的字符作為編碼后的輸出。
    c.不斷進行,直到全部輸入數(shù)據(jù)轉(zhuǎn)換完成。
    d.如果最后剩下兩個輸入數(shù)據(jù),在編碼結(jié)果后加1個“=”;
    e.如果最后剩下一個輸入數(shù)據(jù),編碼結(jié)果后加2個“=”;
    f.如果沒有剩下任何數(shù)據(jù),就什么都不要加,這樣才可以保證資料還原的正確性。

3.實現(xiàn)
    a.說明:
        1)從iOS7.0 開始,蘋果就提供了base64的編碼和解碼支持
        2)如果是老項目,則還能看到base64編碼和解碼的第三方框架,如果當前不再支持iOS7.0以下版本,則建議替換。

    b.相關(guān)代碼:
    //給定一個字符串,對該字符串進行Base64編碼,然后返回編碼后的結(jié)果
    -(NSString *)base64EncodeString:(NSString *)string
    {
        //1.先把字符串轉(zhuǎn)換為二進制數(shù)據(jù)
        NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

        //2.對二進制數(shù)據(jù)進行base64編碼,返回編碼后的字符串
        return [data base64EncodedStringWithOptions:0];
    }

    //對base64編碼后的字符串進行解碼
    -(NSString *)base64DecodeString:(NSString *)string
    {
        //1.將base64編碼后的字符串『解碼』為二進制數(shù)據(jù)
        NSData *data = [[NSData alloc]initWithBase64EncodedString:string options:0];

        //2.把二進制數(shù)據(jù)轉(zhuǎn)換為字符串返回
        return [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    }

    c.終端測試命令
        $ echo -n A | base64
        $ echo -n QQ== |base64 -D

3.常見的加密算法和其它

1. base64 編碼格式
2. 密碼學演化 "秘密本"-->RSA
3. 常見的加密算法
    1)消息摘要(單向散列函數(shù))
    2)對稱加密
    3)非對稱加密
    4)證書等

4.單向散列函數(shù)

1.單向散列函數(shù)的特點:
    ①加密后密文的長度是定長的
    ②如果明文不一樣,那么散列后的結(jié)果一定不一樣
    ③如果明文一樣,那么加密后的密文一定一樣(對相同數(shù)據(jù)加密,加密后的密文一樣)
    ④所有的加密算法是公開的
    ⑤不可以逆推反算
2.經(jīng)典加密算法
    1)MD5加密
    2)SHA1
    3)SHA512
3.MD5加密算法簡單說明
    1)對字符串進行MD5加密可以得到一個32個字符的密文
    2)加密之后不能根據(jù)密文逆推出明文
    3)MD5已經(jīng)被破解(暴力破解|碰撞檢測)
4.MD5加密進階
    1)先加鹽,然后再進行MD5
    2)先亂序,再進行MD5加密
    3)亂序|加鹽,多次MD5加密等
    4)使用消息認證機制,即HMAC-MD5-先對密鑰進行加密,加密之后進行兩次MD5散列
    5)加密命令行
        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"

5.散列函數(shù)應用領(lǐng)域
    1)搜索 多個關(guān)鍵字,先對每個關(guān)鍵字進行散列,然后多個關(guān)鍵字進行或運算,如果值一致則搜索結(jié)果一致
    2)版權(quán) 對文件進行散列判斷該文件是否是正版或原版的
    3)文件完整性驗證 對整個文件進行散列,比較散列值判斷文件是否完整或被篡改
6.消息認證機制(HMAC)簡單說明
    1)原理
        ①消息的發(fā)送者和接收者有一個共享密鑰
        ②發(fā)送者使用共享密鑰對消息加密計算得到MAC值(消息認證碼)
        ③消息接收者使用共享密鑰對消息加密計算得到MAC值
        ④比較兩個MAC值是否一致
    2)使用
        ①客戶端需要在發(fā)送的時候把(消息)+(消息·HMAC)一起發(fā)送給服務器
        ②服務器接收到數(shù)據(jù)后,對拿到的消息用共享的KEY進行HMAC,比較是否一致,如果一致則信任

5.對稱加密

1.對稱加密的特點
    1)加密/解密使用相同的密鑰
    2)加密和解密的過程是可逆的(明文-》明文-》明文)
2.經(jīng)典算法
    1)DES 數(shù)據(jù)加密標準
    2)3DES 使用3個密鑰,對消息進行(密鑰1·加密)+(密鑰2·解密)+(密鑰3·加密)
    3)AES 高級加密標準
3.分組密碼簡單說明
    密碼算法可以分為分組密碼和流密碼兩種。
    分組密碼:每次只能處理特定長度的一zu數(shù)據(jù)的一類密碼算法。一個分組的比特數(shù)量就稱之為分組長度。
    ex:DES和3DES的分組長度都是64比特。即每次只能加密64比特的明文,并生成64比特的密文。AES的分組長度有128比特、192比特和256比特可以選擇。
    流密碼:對數(shù)據(jù)流進行連續(xù)處理的一類算法。流密碼中一般以1比特、8比特或者是32比特等作為單位倆進行加密和解密。
4.ECB分組模式
    ECB模式的全稱為Electronic CodeBook模式。又成為電子密碼本模式。
    特點:
    1)使用ECB模式加密的時候,相同的明文分組會被轉(zhuǎn)換為相同的密文分組。
    2)類似于一個巨大的明文分組-》密文分組的對照表。
    終端測試命令:
    加密 $ openssl enc -des-ecb -K 616263 -nosalt -in 123.txt -out 123.bin
    解密 $ openssl enc -des-ecb -K 616263 -nosalt -in 123.bin -out 1231.txt -d
5.CBC分組模式
    CBC模式全稱為Cipher Block Chainning模式(密文分組鏈接模式|電子密碼鏈條)
    特點:在CBC模式中,首先將明文分組與前一個密文分組進行XOR運算,然后再進行加密。
    終端命令:
    加密 $ openssl enc -des-cbc -K 616263 -iv 0102030405060708 -nosalt -in a.txt -out a.bin
    解密 $ openssl enc -des-cbc -K 616263 -iv 0102030405060708 -nosalt -in a.bin -out a1.txt -d

6.非對稱加密

1.非對稱加密的特點
    1)使用公鑰加密,使用私鑰解密
    2)公鑰是公開的,私鑰保密
    3)加密處理安全,但是性能極差
2.經(jīng)典算法---RSA
    1)RSA 原理
        (1)求N,準備兩個質(zhì)數(shù)p和q,N = p x q
        (2)求L,L是p-1和q-1的最小公倍數(shù)。L = lcm(p-1,q-1)
        (3)求E,E和L的最大公約數(shù)為1(E和L互質(zhì))
        (4)求D,E x D mode L = 1
    2)RSA加密小實踐
        (1)p = 17,q = 19 =>N = 323
        (2)lcm(p-1,q-1)=>lcm(16,18)=>L= 144
        (3)gcd(E,L)=1 =>E=5
        (4)E乘以幾可以mode L =1? D=29可以滿足
        (5)得到公鑰為:E=5,N=323
        (6)得到私鑰為:D=29,N=323
        (7)加密 明文的E次方 mod N = 123的5次方 mod 323 = 225(密文)
        (8)解密 密文的D次方 mod N = 225的29次方 mod 323 = 123(明文)
        ----------------
    3)openssl生成密鑰命令
        生成強度是 512 的 RSA 私鑰:$ openssl genrsa -out private.pem 512
        以明文輸出私鑰內(nèi)容:$ openssl rsa -in private.pem -text -out private.txt
        校驗私鑰文件:$ openssl rsa -in private.pem -check
        從私鑰中提取公鑰:$ openssl rsa -in private.pem -out public.pem -outform PEM -pubout
        以明文輸出公鑰內(nèi)容:$ openssl rsa -in public.pem -out public.txt -pubin -pubout -text
        使用公鑰加密小文件:$ openssl rsautl -encrypt -pubin -inkey public.pem -in msg.txt -out msg.bin
        使用私鑰解密小文件:$ openssl rsautl -decrypt -inkey private.pem -in msg.bin -out a.txt
        將私鑰轉(zhuǎn)換成 DER 格式:$ openssl rsa -in private.pem -out private.der -outform der
        將公鑰轉(zhuǎn)換成 DER 格式:$ openssl rsa -in public.pem -out public.der -pubin -outform der
        -----------------

7.數(shù)字簽名

1.數(shù)字簽名的應用場景
    答:需要嚴格驗證發(fā)送方身份信息情況
2.數(shù)字簽名原理
    1)客戶端處理
        ①對"消息"進行 HASH 得到 "消息摘要"
        ②發(fā)送方使用自己的私鑰對"消息摘要" 加密(數(shù)字簽名)
        ③把數(shù)字簽名附著在"報文"的末尾一起發(fā)送給接收方
    2)服務端處理
        ①對"消息" HASH 得到 "報文摘要"
        ②使用公鑰對"數(shù)字簽名" 解密
        ③對結(jié)果進行匹配

8.數(shù)字證書

1.簡單說明
    證書和駕照很相似,里面記有姓名、組織、地址等個人信息,以及屬于此人的公鑰,并有認證機構(gòu)施加數(shù)字簽名,只要看到公鑰證書,我們就可以知道認證機構(gòu)認證該公鑰的確屬于此人
2.數(shù)字證書的內(nèi)容
    1)公鑰
    2)認證機構(gòu)的數(shù)字簽名
3.證書的生成步驟
    1)生成私鑰 openssl genrsa -out private.pem 1024
    2)創(chuàng)建證書請求 openssl req -new -key private.pem -out rsacert.csr
    3)生成證書并簽名,有效期10年 openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
    4)將 PEM 格式文件轉(zhuǎn)換成 DER 格式 openssl x509 -outform der -in rsacert.crt -out rsacert.der
    5)導出P12文件 openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt

4.iOS開發(fā)中的注意點
    1)在iOS開發(fā)中,不能直接使用 PEM 格式的證書,因為其內(nèi)部進行了Base64編碼,應該使用的是DER的證書,是二進制格式的
    2)OpenSSL默認生成的都是PEM格式的證書
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內(nèi)容

  • 1.數(shù)據(jù)安全 01 攻城利器:Charles(公司中一般都使用該工具來抓包,并做網(wǎng)絡測試) 注意:Charles在...
    Lucky丶晴閱讀 1,425評論 0 9
  • 1.數(shù)據(jù)安全 01數(shù)據(jù)安全的原則1)在網(wǎng)絡上"不允許"傳輸用戶隱私數(shù)據(jù)的"明文"2.)在本地"不允許"保存用戶隱私...
    陳賀閱讀 2,171評論 0 2
  • 1.數(shù)據(jù)安全 01數(shù)據(jù)安全的原則1)在網(wǎng)絡上"不允許"傳輸用戶隱私數(shù)據(jù)的"明文"2.)在本地"不允許"保存用戶隱私...
    小楓123閱讀 489評論 0 1
  • 這篇文章主要講述在Mobile BI(移動商務智能)開發(fā)過程中,在網(wǎng)絡通信、數(shù)據(jù)存儲、登錄驗證這幾個方面涉及的加密...
    雨_樹閱讀 2,562評論 0 6
  • 今天天氣很好,公司開兩會,中午吃完飯就開始開,一直到傍晚,還有書發(fā)。晚上還有晚會,啊好幸福! 可是,以上所有除了吃...
    戀花者語閱讀 283評論 0 0