iOS-密碼學(xué)(一)哈希-DES挖腰、AES雕沿、RSA、md5

密碼學(xué)簡介:

領(lǐng)域 --> 軍事
起源公元前 : 凱撒大帝
有一個(gè)密碼本:
a -- e
b -- c
c -- z
...
美國!設(shè)備是最先進(jìn)的! 截取日軍的電報(bào)信息!(密文傳遞的) -- 破譯
時(shí)間 事件(大規(guī)模的集結(jié)) 地點(diǎn)?AF(中途島)
持續(xù)到 上世紀(jì)70年代 ,70 年代出現(xiàn)了一個(gè)特別偉大的算法叫RSA(三個(gè)人名)


1. 哈希(Hash 散列函數(shù))

- 不可逆:密碼"識別",文件"識別"
- 簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數(shù)猴仑。
- 一個(gè)二進(jìn)制數(shù)據(jù)审轮,只有一個(gè)Hash值

注意:base64是編碼格式,不是加密方式

加密方式:

  • MD5
  • SHA1
  • SHA256/512
1.1 散列函數(shù):

特點(diǎn):

  • 算法公開的.
  • 對相同的數(shù)據(jù)加密,得到的結(jié)果是一樣的.
  • 對不同的數(shù)據(jù)加密,得到的結(jié)果是定長的,MD5對不同的數(shù)據(jù)進(jìn)行加密,得到的結(jié)果都是32個(gè)字符.(所能標(biāo)識的個(gè)數(shù)是有限的)
  • 信息摘要,信息"指紋",是用來做數(shù)據(jù)識別的.
  • 不能反算的. 指紋-->某個(gè)人:不可能
1.2 散列破解:
1.3 MD5用途
  • 密碼,服務(wù)器是不需要知道用戶的真實(shí)密碼的!在用戶注冊的時(shí)候服務(wù)器就對密碼進(jìn)行了加密處理,然后保存在數(shù)據(jù)庫!
  • 搜索
    hank ios
    ios hank
    ios - MD5 9e304d4e8df1b74cfa009913198428ab
    hank - MD5 b6dfea72ba631c88abe4a1d17114bfcf
  • 百度云&360云盤<苍篡诽!秒傳!榴捡!服務(wù)器上只要有這個(gè)文件杈女,那么用戶可以實(shí)現(xiàn)秒傳, (文件)MD5
  • 版權(quán)
    不同的數(shù)據(jù) MD5 之后差別是非常大的!!
    123.png 0e6c471b5849e7a10f1a6a3172034fff
    456.png 0fea626f61419becf8005fdf942e668e

1.4 MD5 的基本安全
1.加"鹽" - 早期使用!
2.HMAC,近一兩年,在國內(nèi)開始使用增多!
    給定一個(gè)密鑰,對明文進(jìn)行密鑰拼接,并且做"兩次散列" -> 得到32位結(jié)果!
1.5 HMAC :
- 用戶在注冊的那一刻,向服務(wù)器索取 密鑰(key)!!
- 客戶端拿到KEY的這一刻,就將KEY保存在本地!!
- 切換了新的設(shè)備(換手機(jī)登錄,登錄新的已有賬號!) -- 重新找服務(wù)器獲取!!


二吊圾、對稱加密算法

2.0 可逆达椰,傳統(tǒng)加密算法)
2.1 加密和解密使用同一個(gè)"密鑰"!项乒!
2.2 密鑰的保密工作非常重要(密鑰會定期更換!密鑰的管理很重要!!)

  • 經(jīng)典算法
- DES   (數(shù)據(jù)加密標(biāo)準(zhǔn):用的少砰碴,應(yīng)為強(qiáng)度不夠)
- 3DES  (使用3個(gè)密鑰,對相同的數(shù)據(jù)執(zhí)行三次加密板丽,強(qiáng)度增加:更加用的少!)
- AES    (高級密碼標(biāo)準(zhǔn),美國國家安全局使用的,iOS系統(tǒng)使用的加密方式(鑰匙串))趁尼!
    破解需要2000年0<睢!
  • 對稱加密算法有兩種加密方式:ECB & CBC

ECB:
1.電子代碼本酥泞,就是說每個(gè)代碼塊都是獨(dú)立加密的:就是將一個(gè)數(shù)據(jù)拆分為多塊,然后獨(dú)立加密!
2.將8個(gè)數(shù)據(jù)塊砚殿,一個(gè)個(gè)加密,然后進(jìn)行拼接芝囤;一個(gè)個(gè)解密似炎,然后拼接成完整數(shù)據(jù)!

CBC:
1.密碼快鏈
2.后面的每個(gè)加密數(shù)據(jù)塊悯姊,都與上一個(gè)數(shù)據(jù)快有關(guān)羡藐;使用一個(gè)密鑰和一個(gè)"初始化向量(IV)"對數(shù)據(jù)執(zhí)行進(jìn)行加密
3.如果在傳輸數(shù)據(jù)的過程中,一個(gè)數(shù)據(jù)塊被破壞了悯许,后面所有的數(shù)據(jù)將會被破壞仆嗦!那么整個(gè)數(shù)據(jù)就無法解密了!
4.向量:某個(gè)方向的數(shù)量先壕,現(xiàn)代的密碼學(xué)都和幾何有關(guān)!因?yàn)閹缀?包含圓形\橢圓\球體)的變量是有規(guī)律的,但是結(jié)果是多變的!


三瘩扼、非對稱加密算法

RSA:是三個(gè)人(可逆,現(xiàn)代加密算法垃僚,效率低:因?yàn)槭呛唵蔚臄?shù)學(xué)計(jì)算集绰,所以加密的效率低)
3.1 公鑰和私鑰(公鑰也是私鑰加密過的)
3.2 公鑰加密,私鑰解密
3.3 私鑰加密,公鑰解密

  • RSA 加密算法!算法是公開的!長度在200位以上的數(shù)字!

    • 找到兩個(gè)最大的素?cái)?shù)谆棺,進(jìn)行最大公約-->公鑰
    • 把這兩個(gè)素?cái)?shù)進(jìn)行加1栽燕,再求最大公約-->私鑰
    • 整個(gè)過程就是遞歸的運(yùn)算!!
  • 用因式分解破解密碼,大概需要50年!!書名《我和RSA的20年》-- 結(jié)果就是破解RSA 只能用因式分解

  • 量子計(jì)算機(jī):很快纫谅,可以暴力破解RSAl畔汀(銀行使用的多)
    百科:非對稱加密算法

四、iOS終端指令:加密解密測試

/**
 *  終端測試指令 unix
 *
 *  DES(ECB)加密
 *  $ echo -n hello | openssl enc -des-ecb -K 616263 -nosalt | base64
 *
 *  DES(CBC)加密
 *  $ echo -n hello | openssl enc -des-cbc -iv 0102030405060708 -K 616263 -nosalt | base64
 *
  *
 *  AES(ECB)加密
 *  $ echo -n hello | openssl enc -aes-128-ecb -K 616263 -nosalt | base64
 *
 *  AES(CBC)加密
 *  $ echo -n hello | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt | base64
 *
 *
 *
 *  DES(ECB)解密
 *  $ echo -n HQr0Oij2kbo= | base64 -D | openssl enc -des-ecb -K 616263 -nosalt -d
 *
 *  DES(CBC)解密
 *  $ echo -n alvrvb3Gz88= | base64 -D | openssl enc -des-cbc -iv 0102030405060708 -K 616263 -nosalt -d
 *
 *
 *
 *  AES(ECB)解密
 *  $ echo -n d1QG4T2tivoi0Kiu3NEmZQ== | base64 -D | openssl enc -aes-128-ecb -K 616263 -nosalt -d
 *
 *  AES(CBC)解密
 *  $ echo -n u3W/N816uzFpcg6pZ+kbdg== | base64 -D | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt -d
 *
 *
 *  MD5加密
 *  $ md5 -s "zm"   //md5加密 字符串
 *  $ md5 + 文件      //md5加密 文件
 *
 * 
 *
 *  提示:
 * 1> 加密過程是先加密付秕,再base64編碼
 * 2> 解密過程是先base64解碼兰珍,再解密
 * 3> 加密字符串 hello,密鑰abc(abc 的 ASCII可顯示字符: 616263)
//輸出hello 通過管道 | 到 openssl
 * 4> $ echo -n hello | openssl:    
    
//base64解碼
 * 5> $ base64 -D:  

//查看文件的 ASCII可顯示字符                                                  
 * 6> $ xxd + 文件名      

//生成一個(gè)密鑰(私鑰)询吴,名稱為 private.pem                                                    
 * 7> $ openssl genrsa -out private.pem 512     

//生成一個(gè)密鑰(公鑰)掠河,名稱為 public.pem     
 * 8> $ openssl rsa -in private.pem -out public.pem -pubout     

//查看密鑰
 * 9> $ cat private.pem                                 
 * 10> $ cat public.pem
 * 11> $ openssl rsa -in private.pem -text -out private.txt     //輸出私鑰到 txt 文本
 * 
 * 密鑰 應(yīng)用場景:數(shù)字簽名
 * 數(shù)據(jù)報(bào)文發(fā)送:數(shù)據(jù)報(bào)文1、數(shù)據(jù)報(bào)文2猛计、數(shù)據(jù)報(bào)文3...
 * 客服端:1.數(shù)據(jù)報(bào)文--> HASH算法(使用md5) --> 32位字符  --> RSA加密(對md5值進(jìn)行RSA公鑰加密:即 數(shù)字簽名)
 *        2.數(shù)據(jù)報(bào)文 + 數(shù)字簽名 --> 服務(wù)器
 * 服務(wù)器:1.數(shù)據(jù)報(bào)文--> HASH算法 --> 32位字符 str1
 *        2.數(shù)字簽名 --> RSA解密 --> 32位字符 str2  (利用私鑰解密)
 *        3. str1 = str2 (數(shù)據(jù)沒有被修改過)
 * 
 * 
 */  (md5對RSA公鑰加密密文進(jìn)行加密:即 數(shù)字簽名)
ASCII可顯示字符

網(wǎng)站:ASCII碼對照表

終端測試
$ md5 -s "iOS"
結(jié)果:MD5 ("iOS") = 1bdf605991920db11cbdf8508204c4eb
$ md5 -s "zm"   
結(jié)果:MD5 ("zm") = d9c2967765305ff512a5ab979ed1f7a0

ASCII可顯示字符.txt 內(nèi)容:abcdef hk (一個(gè)txt文件的內(nèi))

$ xxd ASCII可顯示字符.txt
00000000: 6162 6364 6566 2020 686b                 abcdef  hk
$ cat private.pem   //查看密鑰(私鑰)//base64編碼的結(jié)果 512位
-----BEGIN RSA PRIVATE KEY-----
MIIBPAIBAAJBALxACyEl08USUUCdZZ0yU5SxX7frfn0OeL0RJdSV6qdvTtVrCbE0
X5AiXM/VEPEjzu+U+TOVrdN4tJNlLKTrBJUCAwEAAQJATGx7mDNxK7pp/h9oF09N
Gzp/L32NVlu/rJH/l7RdFSep4JVEo8GQ1pu5yX1TWn4q1dZSbZZXVsTblhUbxEcI
AQIhAPMHPNgiKP+4UBSqG/DEPCb/qtydvCrcqOzVn/0HorsBAiEAxkxP+VGO/wG1
rogk9a/YHQ4FFsFfJpVSHWy/TIFVLZUCIQC6JqYVS30p+uzkFzSVpEoK+TTQDcYu
8pw15J/KecnNAQIhALKm5hZU6GPOgoSvm7zNpALpMqSBqtv0A3sHEoI2syrRAiEAk5copPkLcZ3gIXAvmHGQ4euDUYpQqMCSuw5w5ZPHG5A=                
-----END RSA PRIVATE KEY----- 

$ cat public.pem    //查看密鑰(公鑰)//base64編碼的結(jié)
-----BEGIN PUBLIC KEY----MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALxACyEl08USUUCdZZ0yU5SxX7frfn0O
eL0RJdSV6qdvTtVrCbE0X5AiXM/VEPEjzu+U+TOVrdN4tJNlLKTrBJUCAwEAAQ==    果
-----END PUBLIC KEY----- <br>

蘋果的p12證書唠摹,也是利用RSA創(chuàng)建的

  • 對稱加密 數(shù)據(jù)塊 的理解

abc.txt 內(nèi)容1
00000000
11111111
22222222
00000000
11111111
22222222
00000000
11111111
22222222
00000000
11111111
32222222

abc.txt 內(nèi)容2
00000000
11111111
22222222
00000000
11111111
22222222
00000000
11111111
22222222
00000000
11111111
32222222
  • 對以上文件 終端命令測試
$ ls
abc.txt  
// DES-ECB 加密:abc.txt 內(nèi)容1
$ openssl enc -des-ecb -K 616261 -nosalt -in abc.txt -out msg1.bin
$ ls
abc.txt  msg1.bin
$ xxd msg1.bin
00000000: 380e 2176 3c39 a20f 92f3 529a 21b6 00a8  8.!v<9....R.!...
00000010: 9bbd 88d9 7b7c b950 0d3d af76 4906 1401  ....{|.P.=.vI...
00000020: 144b 6c44 776c a64c 9123 dcde 7746 be29  .KlDwl.L.#..wF.)
00000030: e000 dfb8 b989 cbf0 3452 1498 122b b918  ........4R...+..
00000040: b694 cafa 8d16 29f7 10f7 eca3 e892 8ea2  ......).........
00000050: d224 68ba d07e 6f9c fcd5 388b 2725 d408  .$h..~o...8.'%..
00000060: 682a 385e cf89 1929 2043 36f5 c7b4 2bf5  h*8^...) C6...+.
// DES-ECB 加密:abc.txt 內(nèi)容2
$ openssl enc -des-ecb -K 616261 -nosalt -in abc.txt -out msg2.bin
$ xxd msg2.bin
00000000: 380e 2176 3c39 a20f 92f3 529a 21b6 00a8  8.!v<9....R.!...
00000010: 9bbd 88d9 7b7c b950 0d3d af76 4906 1401  ....{|.P.=.vI...
00000020: 144b 6c44 776c a64c 9123 dcde 7746 be29  .KlDwl.L.#..wF.)
00000030: e000 dfb8 b989 cbf0 3452 1498 122b b918  ........4R...+..
00000040: b694 cafa 8d16 29f7 10f7 eca3 e892 8ea2  ......).........
00000050: d224 68ba d07e 6f9c fcd5 388b 2725 d408  .$h..~o...8.'%..
00000060: 501b 6d91 b1dd 7a8c 2043 36f5 c7b4 2bf5  P.m...z. C6...+.
// 總結(jié): DES-ECB 加密結(jié)果,只是一個(gè)塊數(shù)據(jù)加密加過不同


// MD5 加密:abc.txt 內(nèi)容1
$ md5 abc.txt
MD5 (abc.txt) = 900e09f7dcf7f72a2fdc971633c75448
// MD5 加密:abc.txt 內(nèi)容2
$ md5 abc.txt
MD5 (abc.txt) = 2fe03ad66c092df04a217e6653b102ee
// MD5 加密結(jié)果:完全不一樣


// DES-CBC 加密:abc.txt 內(nèi)容1
$ openssl enc -des-cbc -iv 0102030405060708 -K 616261 -nosalt -in abc.txt -out msg3.bin
// DES-CBC 加密:abc.txt 內(nèi)容2
$ openssl enc -des-cbc -iv 0102030405060708 -K 616261 -nosalt -in abc.txt -out msg4.bin
// DES-CBC 加密:abc.txt 內(nèi)容1 結(jié)果
$ xxd msg3.bin
00000000: 4d09 2bbf f72a f997 e530 a568 3169 e7b8  M.+..*...0.h1i..
00000010: b757 b13c ea2d 33dc 4b4e 1f93 d311 735e  .W.<.-3.KN....s^
00000020: f695 6749 5189 07b9 418b 8978 4fb1 bbdd  ..gIQ...A..xO...
00000030: af8e 7f2c ab72 cc9c 87e7 cc37 f854 7dfd  ...,.r.....7.T}.
00000040: 67b7 5406 3e71 b47a aaba 119a 3d5f 374e  g.T.>q.z....=_7N
00000050: 7165 d5b8 93ea 4777 25bc 0685 1a20 2384  qe....Gw%.... #.
00000060: 5661 6e4f 1c6d 27ac 5e7f 8242 856f f472  VanO.m'.^..B.o.r
// DES-CBC 加密:abc.txt 內(nèi)容2 結(jié)果
$ xxd msg4.bin
00000000: 4d09 2bbf f72a f997 e530 a568 3169 e7b8  M.+..*...0.h1i..
00000010: b757 b13c ea2d 33dc 4b4e 1f93 d311 735e  .W.<.-3.KN....s^
00000020: f695 6749 5189 07b9 418b 8978 4fb1 bbdd  ..gIQ...A..xO...
00000030: af8e 7f2c ab72 cc9c 87e7 cc37 f854 7dfd  ...,.r.....7.T}.
00000040: 67b7 5406 3e71 b47a aaba 119a 3d5f 374e  g.T.>q.z....=_7N
00000050: 7165 d5b8 93ea 4777 25bc 0685 1a20 2384  qe....Gw%.... #.
00000060: 893c afe6 01d9 a87c 5645 4959 400a 4dad  .<.....|VEIY@.M.
$
// 總結(jié): DES-CBC 加密結(jié)果奉瘤,一個(gè)數(shù)據(jù)塊改變勾拉,這個(gè)數(shù)據(jù)塊后面的數(shù)據(jù)塊 加密結(jié)果都不同
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市盗温,隨后出現(xiàn)的幾起案子藕赞,更是在濱河造成了極大的恐慌,老刑警劉巖卖局,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斧蜕,死亡現(xiàn)場離奇詭異,居然都是意外死亡砚偶,警方通過查閱死者的電腦和手機(jī)批销,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來染坯,“玉大人均芽,你說我怎么就攤上這事【魄耄” “怎么了骡技?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長羞反。 經(jīng)常有香客問我布朦,道長,這世上最難降的妖魔是什么昼窗? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任是趴,我火速辦了婚禮,結(jié)果婚禮上澄惊,老公的妹妹穿的比我還像新娘唆途。我一直安慰自己富雅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布肛搬。 她就那樣靜靜地躺著没佑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪温赔。 梳的紋絲不亂的頭發(fā)上蛤奢,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機(jī)與錄音陶贼,去河邊找鬼啤贩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拜秧,可吹牛的內(nèi)容都是我干的痹屹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼枉氮,長吁一口氣:“原來是場噩夢啊……” “哼志衍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起聊替,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤足画,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后佃牛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡医舆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年俘侠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔬将。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爷速,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出霞怀,到底是詐尸還是另有隱情惫东,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布毙石,位于F島的核電站廉沮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏徐矩。R本人自食惡果不足惜滞时,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滤灯。 院中可真熱鬧坪稽,春花似錦曼玩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至篙梢,卻和暖如春顷帖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背庭猩。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工窟她, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蔼水。 一個(gè)月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓震糖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親趴腋。 傳聞我的和親對象是個(gè)殘疾皇子吊说,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

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