iOS逆向攻防之密碼學(xué)基礎(chǔ)及RSA數(shù)學(xué)原理、Base64編碼

直接上密碼學(xué)入門級知識部分,今天的內(nèi)容如下:

1、密碼學(xué)概述
2、離散對數(shù)問題
3、歐拉函數(shù)、歐拉定理、費馬小定理
4、模反元素&公式推導(dǎo)
5、迪菲赫爾曼密鑰交換
6、終端演示:RSA加密
7、證書生成
8、base64編碼

一、密碼學(xué)概述與發(fā)展歷史


1、密碼學(xué)的概述

密碼學(xué)是指研究信息加密,破解密碼的一門技術(shù)科學(xué)。

2、密碼學(xué)的主要發(fā)展歷史:

密碼學(xué)的起源可追溯至2000年前,而當今的密碼學(xué)是以數(shù)學(xué)為基礎(chǔ)的。

密碼學(xué)的起源:相傳古羅馬名將凱撒大帝為了防止別人截獲情報,用密碼傳送情報。凱撒的做法很簡單,就是對二十幾個羅馬字母建立一張對應(yīng)表。這樣,如果不知道密碼本,即使截獲一段信息也看不懂。密碼學(xué)也正是在編碼與破譯的斗爭實踐中逐步發(fā)展起來的。

·從凱撒大帝時代到上世紀70年代這段很長的時間里,密碼學(xué)發(fā)展的十分緩慢,因為設(shè)計者基本上靠經(jīng)驗,沒有運用數(shù)學(xué)原理。

·在1976以前,所有的加密方法都是同一種模式:加密和解密使用同一種算法。在交互數(shù)據(jù)的時候,彼此通信的雙方就必須把規(guī)則告訴對方,否則無法解密。那么加密和解密的規(guī)則(簡稱 密鑰【mì yuè】),它的保護就顯得尤其重要。傳遞密鑰成了最大的隱患。這種加密方式稱為對稱加密算法

·1976年,兩位美國計算機學(xué)家迪菲(Bailey Whitfield Diffie)、赫爾曼(Martin Edward Hellman)提出了一種嶄新構(gòu)思,可以在不傳遞密鑰的情況下,完成密鑰交換。這被稱為“迪菲-赫爾曼密鑰交換(英語:Diffie–Hellman key exchange,縮寫為D-H)”算法,開啟了密碼學(xué)研究的新方向。

·1977年三位麻省理工學(xué)院的數(shù)學(xué)家羅納德·李維斯特Ron Rivest)、阿迪·薩莫爾Adi Shamir)和倫納德·阿德曼Leonard Adleman)一起設(shè)計了一種算法,可以實現(xiàn)非對稱加密。這個算法用他們?nèi)齻€人的姓氏首字母命名,叫做RSA算法

二、離散對數(shù)問題


先看下面一個取模運算的例子(取模運算叫做時鐘運算,我們也常稱為取余數(shù)運算,運算符為'mod',簡寫為'%'

如果取一個質(zhì)數(shù)n做模數(shù),比如n=17,再找一個小于n的質(zhì)數(shù)m,比如m=3,則有一個數(shù)學(xué)的規(guī)律:如果3的k次方,滿足當k是小于17的正整數(shù)的時候,比如k在1~16中間取,滿足 m ^ k % n 的結(jié)果在1~(n-1)中間隨機的時候(這個隨機是分別對應(yīng),不會重復(fù)!),m就稱為n的原根。

3為17的原根

3 ^ 1  % 17 = 3;
3 ^ 2  % 17 = 9;
3 ^ 3  % 17 = 10;
3 ^ 4  % 17 = 13;
3 ^ 5  % 17 = 5;
3 ^ 6  % 17 = 15;
3 ^ 7  % 17 = 11;
3 ^ 8  % 17 = 16;
3 ^ 9  % 17 = 14;
3 ^ 10  % 17 = 8;
3 ^ 11  % 17 = 7;
3 ^ 12  % 17 = 4;
3 ^ 13  % 17 = 12;
3 ^ 14  % 17 = 2;
3 ^ 15  % 17 = 6;
3 ^ 16  % 17 = 1;

...

m ^ k % n = r;(上面m=3,k遞增,n為17,結(jié)果r就在1~(17 -1)范圍內(nèi)取值)

根據(jù)上面的例子思考:比如讓你完成填空 3 ^ k mod 17 = 12;(m為正整數(shù)),那么m的值可以取13;

因為3的13次方模17等于12,k可以取值為13,但是k還可以取其他的值,使3的k次方模17等于12,這個等式從左邊推理:3 ^ 13 mod 17 等于12,但是這個等式反過來推k的值,就是不確定的一個值,k=13只是其中的一個值,密碼學(xué)中要通過這個等式來推出確定的k的值(比如逆推出k=13),就會非常的難,并且難度會隨著取模的質(zhì)數(shù)(例子中17這個數(shù))的增大而增加,這個問題就是離散對數(shù)問題。如果取模的質(zhì)數(shù)k(例子中是17這個數(shù))非常大,長達幾百位,那么就算你知道整個表達式的結(jié)果和算法,在比較有限的時間內(nèi),想要反推k的值,基本是不可能的。

三、歐拉函數(shù)及歐拉定理


1、歐拉函數(shù)

質(zhì)數(shù)的概念:只能被1和自己整除的正整數(shù),比如2,3,5,7,11...
互質(zhì)關(guān)系:如果兩個正整數(shù),除了1之外,沒有其他公因數(shù),我們就稱這兩個數(shù)是互質(zhì)關(guān)系。

那么問題來了,思考一下:
給定任意正整數(shù)n,請問在小于等于n的正整數(shù)之中,有多少個與n能構(gòu)成互質(zhì)關(guān)系?

如:

計算8的歐拉函數(shù),小于等于8的數(shù)1、2、3、4、5、6、7、8中和8互質(zhì)的有1,3,5,7
所以:φ(8) = 4;
計算7的歐拉函數(shù),小于等于7的數(shù)1、2、3、4、5、6、7中和7互質(zhì)的有1,2,3,4,5,6
所以:φ(7) = 6;
計算6的歐拉函數(shù),小于等于6的數(shù)1、2、3、4、5、6中和6互質(zhì)的有1、5
所以:φ(6) = 2;
計算5的歐拉函數(shù),小于等于5的數(shù)1、2、3、4、5中和5互質(zhì)的有1,2,3,4
所以:φ(5) = 4;

計算56的歐拉函數(shù)
φ(56)= φ(8) * φ(7) = 4 * 6 = 24;

計算這個值的方式叫做歐拉函數(shù),使用:φ(n)表示

歐拉函數(shù)特點:
一、當n是質(zhì)數(shù)的時候,φ(n) = n - 1;
二、如果n可以分解成兩個互質(zhì)的整數(shù)之積,如n = A * B;(A和B互質(zhì)),則: 
   φ(A * B) = φ(A) * φ(B);
   
根據(jù)以上兩點能得到:
如果N是兩個質(zhì)數(shù)P1和P2的乘積,則:
φ(N) = φ(P1) * φ(P2) = (P1 - 1) * (P2 - 1);

所以上面φ(56)= φ(8) * φ(7) = 4 * 6 = 24;

2、歐拉定理

如果兩個正整數(shù)m和n互質(zhì),那么m的φ(n)次方減去1,可以被n整除。

歐拉定理公式:

歐拉定理公式.png

3、費馬小定理

費馬小定理屬于歐拉定理的特殊情況:

如果兩個正整數(shù) m 和 n 互質(zhì),并且  n 為質(zhì)數(shù)!那么φ(n)的結(jié)果就是 n - 1 ;

費馬小定理公式:

費馬小定理公式.png

四、模反元素&公式推導(dǎo)


1、模反元素

如果兩個正整數(shù) e 和 x 互質(zhì),那么一定可以找到整數(shù) d , 使得ed - 1 被 x 整除,那么 d 就是 e 對于 x 的 “模反元素”

模反元素公式:

模反元素公式.png

2、公式推導(dǎo)

公式轉(zhuǎn)換.png
模反元素公式轉(zhuǎn)換.png

根據(jù)上面模反元素的性質(zhì),e 是和 x 互質(zhì);

如果x == φ(n), 也就是 e 和 φ(n)互質(zhì);

套入模反元素的公式推理就能得出最后的公式:

最終公式.png

到這里我提醒一下:m 經(jīng)過一系列變換仍然能夠還原成 m ,只需要滿足兩個條件,這兩個條件是公式轉(zhuǎn)化的必要條件

1、m 和 n 互質(zhì)
2、e 和 φ(n)互質(zhì)

推理的過程中 d 是 e 對于 x 的模反元素,x = φ(n)的時候滿足公式轉(zhuǎn)化, 所以 d 也是 e 對于 φ(n) 的模反元素;但是由于 d 是 模反元素,所以上述兩個條件中的第一個條件,m 和 n 即使沒有互質(zhì)關(guān)系,該等式一樣可以成立,但是需要需要滿足另外一個條件 m < n;具體驗證可自行驗證一下(數(shù)學(xué)家驗證過的定理)

所以得到了最終的公式及滿足公式的條件


公式:

最終公式.png

條件:

1、 m 小于 n 
2、 e 和 φ(n) 互質(zhì)


五、迪菲赫爾曼秘鑰交換


1、密鑰交換原理圖及流程示意圖(實質(zhì)上就是拆分了歐拉定理)

RSA原理.png
RSA原理示意圖.png

2、RSA算法

m ^ e mod n = c    加密
c ^ d mod n = m    解密

公鑰:n 和 e ,主要是 e 
私鑰:n 和 d ,主要是 d
明文:m
密文:c

3、RSA算法說明

1、n會非常大,長度一般為1024個二進制位。(目前人類已經(jīng)分解的最大整數(shù),232個十進制位,768個二進制位)

2、由于需要計算出φ(n),所以根據(jù)歐拉函數(shù)的特點,最簡單的方式n由兩個質(zhì)數(shù)相乘得到,質(zhì)數(shù)p1,p2

φ(n) = (p1 - 1) * (p2 - 1);

3、最終由φ(n)得到 e 和 d。

總共生成6個數(shù)字:p1、p2、n、φ(n)、 e 、 d

4、RSA安全問題

除了公鑰用到了 n 和 e,其余的四個數(shù)字是不公開的。
目前破解RSA得到d的方式如下:
1、要想求出私鑰d。由于e * d = φ(n) * k + 1 ; 必須要知道e 和 φ(n);
2、e 是知道的,但是要得到 φ(n),必須知道 p1和p2;
3、由于n = p1 * p2; 只有把 n 因式分解才能算出來; 但是因為 n 非常大,分解成兩個質(zhì)數(shù)的難度不言而喻,和暴力破解差不多,只能不斷的去嘗試。

5、RSA延伸應(yīng)用思考

由于RSA原理算法推導(dǎo),最開始就有一個條件,就是 m < n, 盡管n會取非常大,但是理論上仍然會限制RSA加密的使用,所以RSA加密不適用于加密非常非常大的數(shù)據(jù),效率比較低,一般結(jié)合其他加密方式來加密關(guān)鍵部分的數(shù)據(jù)。比如加密key,數(shù)字簽名

六、終端演示:RSA加密


一、終端加密指令OpenSSL使用RSA:
由于Mac系統(tǒng)內(nèi)置OpenSSL(開源加密庫),所以我們直接在終端上使用命令來玩RSA,OpenSSL公開庫中RSA算法常用命令主要有三個:

命令1:genrsa  -> 生成并輸入一個RSA私鑰
命令2:rsautl  -> 使用RSA密鑰進行加密、解密、簽名和驗證等運算
命令3:處理RSA密鑰的格式轉(zhuǎn)換等問題

1、生成RSA私鑰,密鑰長度為1024bit,私鑰文件名為private.pem

openssl genrsa -out private.pem 1024

2、從私鑰中提取公鑰

openssl rsa -in private.pem -pubout -out public.pem

3、將私鑰private.pem轉(zhuǎn)化成為明文private.txt文件

openssl rsa -in private.pem -text -out private.txt

4、通過公鑰文件public.pem加密明文文件message.txt,生成enc.txt

openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enc.txt

5、通過私鑰文件private.pem解密公鑰加過密的文件enc.txt并生成解密之后的文件dec.txt

openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt

二、終端加密實踐實例

實例我在里面加入了各步驟的注釋含義

步驟1. cd到一個文件夾下
battleMage:~ battleMage$ cd /Users/fightmaster/Desktop/RSA密碼學(xué)MacDown 

步驟2. 生成私鑰并輸出一個叫private.pem的私鑰文件
battleMage:RSA密碼學(xué)MacDown battleMage$ openssl genrsa -out private.pem 1024
Generating RSA private key, 1024 bit long modulus
.++++++
..................++++++
e is 65537 (0x10001)

步驟3. 根據(jù)私鑰提取一個公鑰,并輸出一個叫public.pem的公鑰文件
battleMage:RSA密碼學(xué)MacDown battleMage$ openssl rsa -in private.pem -pubout -out public.pem
writing RSA key

步驟4. 輸出查看私鑰文件
battleMage:RSA密碼學(xué)MacDown battleMage$ cat private.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDNjQhpiI36VDchXNvdTREfqoyEw2gG+Z8XHyz+4QJ0Bh7WCo2B
q8s72LoqXMcH/0Pxn67zb5sbFTwC1MtK6sZ9a4F6y72LMRKa6emMAuBnvX6k2AsN
7JulkYmfZ8czvtJPGhIYON84dWH5L1uvvV6jzR/Y855m5953oLAPgdmsEwIDAQAB
AoGAVbfUpD3gB16LRwx0W8tBstTqmIrsnMwIPhowJ3IqFbxfq57m+AZuUFzG9deO
4JTg/qg6yyXlptuqFPwscueJMhC6d5cPddmz6wADuu3FS03C7dnyiDOeaQ8ejIzI
yVPWaQChtHWp0kSTCGwAW4WgB7BOvR4SH1SLVMnH6OoYjmECQQDy2aYrYuJFy+qM
VVsueWijT29IO/evRvv0ap9KRcPRkXZi8/yN7W+eakMgM0Nm0pzc4Rdd05c53lc8
VNi30fg5AkEA2K5Y1irEaN74kSWOxEBk98SUN2ZOZxVCp/jEePPTb5aQv49dEvP1
VEktDD8wgHpUdOC3iT9hN8Oabv2cy7POqwJBAOo3XdtEUGTuiXT1Ma6961xuVS5+
n6BNvtx5JM32QSjSuTIwjKi5kchgRgM9TclSYXVqJiYY1yY5uTr3vdhzyokCQFWY
Ye2QjXAkDKtB2+j4yyn5VNehqX0dL+ys3+gr4a1mHB4gIxNWneZC1fHNkHpgWLan
ArnL+LqPoZUQyHzLtesCQGtwhl/NOGeW0vrvqg99Qpb6Pi2hV5oS2bHfImBkJeOx
cTTcyaGL0oTMB5tfh1VnwmgIk6DRjZcIp4prHV3JBQ0=
-----END RSA PRIVATE KEY-----

步驟5. 輸出查看公鑰文件
battleMage:RSA密碼學(xué)MacDown battleMage$ cat public.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNjQhpiI36VDchXNvdTREfqoyE
w2gG+Z8XHyz+4QJ0Bh7WCo2Bq8s72LoqXMcH/0Pxn67zb5sbFTwC1MtK6sZ9a4F6
y72LMRKa6emMAuBnvX6k2AsN7JulkYmfZ8czvtJPGhIYON84dWH5L1uvvV6jzR/Y
855m5953oLAPgdmsEwIDAQAB
-----END PUBLIC KEY-----

步驟6.生成并輸出文件名為private.txt的私鑰txt文件
battleMage:RSA密碼學(xué)MacDown battleMage$ openssl rsa -in private.pem -text -out private.txt
writing RSA key

步驟7.查看私鑰private.txt文件中的內(nèi)容
battleMage:RSA密碼學(xué)MacDown battleMage$ cat private.txt
Private-Key: (1024 bit)
modulus:
    00:cd:8d:08:69:88:8d:fa:54:37:21:5c:db:dd:4d:
    11:1f:aa:8c:84:c3:68:06:f9:9f:17:1f:2c:fe:e1:
    02:74:06:1e:d6:0a:8d:81:ab:cb:3b:d8:ba:2a:5c:
    c7:07:ff:43:f1:9f:ae:f3:6f:9b:1b:15:3c:02:d4:
    cb:4a:ea:c6:7d:6b:81:7a:cb:bd:8b:31:12:9a:e9:
    e9:8c:02:e0:67:bd:7e:a4:d8:0b:0d:ec:9b:a5:91:
    89:9f:67:c7:33:be:d2:4f:1a:12:18:38:df:38:75:
    61:f9:2f:5b:af:bd:5e:a3:cd:1f:d8:f3:9e:66:e7:
    de:77:a0:b0:0f:81:d9:ac:13
publicExponent: 65537 (0x10001)
privateExponent:
    55:b7:d4:a4:3d:e0:07:5e:8b:47:0c:74:5b:cb:41:
    b2:d4:ea:98:8a:ec:9c:cc:08:3e:1a:30:27:72:2a:
    15:bc:5f:ab:9e:e6:f8:06:6e:50:5c:c6:f5:d7:8e:
    e0:94:e0:fe:a8:3a:cb:25:e5:a6:db:aa:14:fc:2c:
    72:e7:89:32:10:ba:77:97:0f:75:d9:b3:eb:00:03:
    ba:ed:c5:4b:4d:c2:ed:d9:f2:88:33:9e:69:0f:1e:
    8c:8c:c8:c9:53:d6:69:00:a1:b4:75:a9:d2:44:93:
    08:6c:00:5b:85:a0:07:b0:4e:bd:1e:12:1f:54:8b:
    54:c9:c7:e8:ea:18:8e:61
prime1:
    00:f2:d9:a6:2b:62:e2:45:cb:ea:8c:55:5b:2e:79:
    68:a3:4f:6f:48:3b:f7:af:46:fb:f4:6a:9f:4a:45:
    c3:d1:91:76:62:f3:fc:8d:ed:6f:9e:6a:43:20:33:
    43:66:d2:9c:dc:e1:17:5d:d3:97:39:de:57:3c:54:
    d8:b7:d1:f8:39
prime2:
    00:d8:ae:58:d6:2a:c4:68:de:f8:91:25:8e:c4:40:
    64:f7:c4:94:37:66:4e:67:15:42:a7:f8:c4:78:f3:
    d3:6f:96:90:bf:8f:5d:12:f3:f5:54:49:2d:0c:3f:
    30:80:7a:54:74:e0:b7:89:3f:61:37:c3:9a:6e:fd:
    9c:cb:b3:ce:ab
exponent1:
    00:ea:37:5d:db:44:50:64:ee:89:74:f5:31:ae:bd:
    eb:5c:6e:55:2e:7e:9f:a0:4d:be:dc:79:24:cd:f6:
    41:28:d2:b9:32:30:8c:a8:b9:91:c8:60:46:03:3d:
    4d:c9:52:61:75:6a:26:26:18:d7:26:39:b9:3a:f7:
    bd:d8:73:ca:89
exponent2:
    55:98:61:ed:90:8d:70:24:0c:ab:41:db:e8:f8:cb:
    29:f9:54:d7:a1:a9:7d:1d:2f:ec:ac:df:e8:2b:e1:
    ad:66:1c:1e:20:23:13:56:9d:e6:42:d5:f1:cd:90:
    7a:60:58:b6:a7:02:b9:cb:f8:ba:8f:a1:95:10:c8:
    7c:cb:b5:eb
coefficient:
    6b:70:86:5f:cd:38:67:96:d2:fa:ef:aa:0f:7d:42:
    96:fa:3e:2d:a1:57:9a:12:d9:b1:df:22:60:64:25:
    e3:b1:71:34:dc:c9:a1:8b:d2:84:cc:07:9b:5f:87:
    55:67:c2:68:08:93:a0:d1:8d:97:08:a7:8a:6b:1d:
    5d:c9:05:0d
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDNjQhpiI36VDchXNvdTREfqoyEw2gG+Z8XHyz+4QJ0Bh7WCo2B
q8s72LoqXMcH/0Pxn67zb5sbFTwC1MtK6sZ9a4F6y72LMRKa6emMAuBnvX6k2AsN
7JulkYmfZ8czvtJPGhIYON84dWH5L1uvvV6jzR/Y855m5953oLAPgdmsEwIDAQAB
AoGAVbfUpD3gB16LRwx0W8tBstTqmIrsnMwIPhowJ3IqFbxfq57m+AZuUFzG9deO
4JTg/qg6yyXlptuqFPwscueJMhC6d5cPddmz6wADuu3FS03C7dnyiDOeaQ8ejIzI
yVPWaQChtHWp0kSTCGwAW4WgB7BOvR4SH1SLVMnH6OoYjmECQQDy2aYrYuJFy+qM
VVsueWijT29IO/evRvv0ap9KRcPRkXZi8/yN7W+eakMgM0Nm0pzc4Rdd05c53lc8
VNi30fg5AkEA2K5Y1irEaN74kSWOxEBk98SUN2ZOZxVCp/jEePPTb5aQv49dEvP1
VEktDD8wgHpUdOC3iT9hN8Oabv2cy7POqwJBAOo3XdtEUGTuiXT1Ma6961xuVS5+
n6BNvtx5JM32QSjSuTIwjKi5kchgRgM9TclSYXVqJiYY1yY5uTr3vdhzyokCQFWY
Ye2QjXAkDKtB2+j4yyn5VNehqX0dL+ys3+gr4a1mHB4gIxNWneZC1fHNkHpgWLan
ArnL+LqPoZUQyHzLtesCQGtwhl/NOGeW0vrvqg99Qpb6Pi2hV5oS2bHfImBkJeOx
cTTcyaGL0oTMB5tfh1VnwmgIk6DRjZcIp4prHV3JBQ0=
-----END RSA PRIVATE KEY-----

步驟8. 生成一個示例message.txt的需要加密的內(nèi)容文件,編輯message.txt文件,隨意填寫一個示例文本,比如"密碼123456"
battleMage:RSA密碼學(xué)MacDown battleMage$ vi message.txt

步驟9. 將message.txt文件通過公鑰public.pem文件加密生成并輸出enc.txt文件
battleMage:RSA密碼學(xué)MacDown battleMage$ openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enc.txt

步驟10. 輸出enc.txt加密后的文件(看起來是亂碼)
battleMage:RSA密碼學(xué)MacDown battleMage$ cat enc.txt
n?9M?^?>???N?h??!?8{?]??????
                            ??R?'??3?D?6i??^
?k6'?
F?>2?s>??Xx1?&\??x?
???? ?!m?2+'?x

步驟11、通過私鑰private.pem文件解密enc.txt文件,并輸出解密后的dec.txt文件
battleMage:RSA密碼學(xué)MacDown battleMage$ openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt
battleMage:RSA密碼學(xué)MacDown battleMage$ 


上述步驟分別得到的結(jié)果是:
步驟2:得到的私鑰文件private.pem


步驟2:得到的私鑰文件private.png

步驟3:從私鑰中提取出來的公鑰文件public.pem

步驟3:從私鑰中提取出來的公鑰文件public.png

步驟6:輸出查看的私鑰txt文件 private.txt

步驟6:輸出查看的私鑰txt文件 private.txt .png

步驟8:生成一個需要加密的message.txt文件,編輯內(nèi)容為"密碼123456"

步驟8:生成一個需要加密的message.txt文件.png

步驟9:message.txt通過公鑰文件public.pem加密并輸出對應(yīng)的加密文件enc.txt

步驟9:message.txt通過公鑰文件public.pem加密并輸出對應(yīng)的加密文件enc.png

步驟11:通過私鑰private.pem解密之前加密的密文enc.txt,并生成解密后的文件dec.txt

步驟11:通過私鑰private.pem解密之前加密的密文enc.txt,并生成解密后的文件dec.png

七、證書生成


如果我們想要使用RSA算法,那么我們需要對應(yīng)的證書文件,但是在項目開發(fā)中,蘋果是不允許我們直接使用pem證書的,我們要生成對應(yīng)的crt文件
需要多次填寫證書的信息,比如下面的國家,省,市,組織信息,郵箱Email,還有證書額外的密碼

/Users/fightmaster/Desktop/RSA密碼學(xué)MacDown/終端操作演示文件

步驟1:根據(jù)私鑰private.pem生成一個RSA證書請求文件
battleMage:終端操作演示文件 battleMage$ openssl req -new -key private.pem -out rsacert.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:CN
State or Province Name (full name) []:hubei
Locality Name (eg, city) []:WuHan
Organization Name (eg, company) []:BattleMage
Organizational Unit Name (eg, section) []:battleMage.com
Common Name (eg, fully qualified host name) []:battleMage.com
Email Address []:1273937502@qq.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456

步驟2:根據(jù).csr請求文件,申請.crt證書文件
battleMage:終端操作演示文件 battleMage$ openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
Signature ok
subject=/C=CN/ST=hubei/L=WuHan/O=BattleMage/OU=battleMage.com/CN=battleMage.com/emailAddress=1273937502@qq.com
Getting Private key

步驟3:生成p.p12文件,及設(shè)置p.p12文件打開的密碼(密碼可以不設(shè)置)
battleMage:終端操作演示文件 battleMage$ openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
Enter Export Password:
Verifying - Enter Export Password:
battleMage:終端操作演示文件 battleMage$ 

終端演示生成文件如下

步驟1,生成的證書請求文件.png
步驟2,根據(jù)請求文件申請的證書文件.png
步驟3,根據(jù)證書文件導(dǎo)出的p.p12文件.png

八、base64編碼


base64只是一種編碼方案,根據(jù)base64對照表將任意的二進制進行編碼;base64主要是為了查看二進制,只是二進制的一種表現(xiàn)形式

base64 總共 65種字符,0 ~ 9,a ~ z,A ~ Z 還有'+','/'和'=',將二進制以每6個為一組進行編碼;

base64編碼表中只有64個字符,編碼表中不包含'=','='是隱含的第65個字符,'='是用來補足最后拆成6位不足的

比如原二進制
0101 1000 0101 0101 0001
經(jīng)過base64以6位為分割,變成
010110 000101 010100 01
不足6位后都補0,變成
010110 000101 010100 010000
因為存儲的時候,內(nèi)存需要對齊,所以可能最后幾個補齊的位置為
010110 000101 010100 010000 000000 000000

后面的這種形式的'000000'就會被替換為'=';所以base64編碼一般都很明顯,最后幾位一般都是'=';

下面是base64位編碼表:

base64編碼表.png

iOS中OC使用base64的代碼示例如下

1、base64編碼

- (NSString *)customBase64Encode:(NSString *)encodeText {
    NSData * data = [encodeText dataUsingEncoding:NSUTF8StringEncoding];
    NSString * tempStr = [data base64EncodedStringWithOptions:0];
    return tempStr;
}

2、base64解碼

- (NSString *)customBase64Decode:(NSString *)decodeText {
    NSData * data = [[NSData alloc] initWithBase64EncodedString:decodeText options:(0)];
    NSString * tempStr = [data base64EncodedStringWithOptions:0];
    return tempStr;
}

今天就到這里,看完有收獲,點個贊謝謝啦~

溪浣雙鯉的技術(shù)摸爬滾打之路

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

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

  • RSA算法簡單介紹: RSA算法是非對稱加密算法,在1977年被羅納德·李維斯特(Ron Rivest)、阿迪·薩...
    SharaYuki閱讀 1,901評論 0 7
  • 密碼學(xué) 密碼學(xué)是指研究信息加密,破解密碼的技術(shù)科學(xué)。密碼學(xué)的起源可追溯到2000年前。而當今的密碼學(xué)是以數(shù)學(xué)為基礎(chǔ)...
    king_jensen閱讀 1,394評論 0 0
  • 推薦閱讀:iOS開發(fā)——BAT面試題合集(持續(xù)更新中) 要講逆向,那么肯定少不了密碼學(xué),因為所有的逆向(攻防)都是...
    iOS開發(fā)之家閱讀 783評論 0 0
  • 密碼學(xué)是在編碼與破譯的斗爭實踐中逐步發(fā)展起來的,并隨著先進科學(xué)技術(shù)的應(yīng)用,已成為一門綜合性的尖端技術(shù)科學(xué)。 密碼學(xué)...
    我叫Vincent閱讀 23,881評論 0 19
  • RSA算法是非對稱加密算法,在1977年被羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Sham...
    妖精的菩薩閱讀 411評論 0 1