直接上密碼學入門級知識部分,今天的內容以下:算法
一、密碼學概述
二、離散對數問題
三、歐拉函數、歐拉定理、費馬小定理
四、模反元素&公式推導
五、迪菲赫爾曼密鑰交換
六、終端演示:RSA加密
七、證書生成
八、base64編碼
複製代碼
一、密碼學的概述安全
密碼學是指研究信息加密,破解密碼的一門技術科學。
複製代碼
二、密碼學的主要發展歷史:bash
密碼學的起源可追溯至2000年前,而當今的密碼學是以數學爲基礎的。函數
密碼學的起源:相傳古羅馬名將凱撒大帝爲了防止別人截獲情報,用密碼傳送情報。凱撒的作法很簡單,就是對二十幾個羅馬字母創建一張對應表。這樣,若是不知道密碼本,即便截獲一段信息也看不懂。密碼學也正是在編碼與破譯的鬥爭實踐中逐步發展起來的。ui
·從凱撒大帝時代到上世紀70年代這段很長的時間裏,密碼學發展的十分緩慢,由於設計者基本上靠經驗,沒有運用數學原理。編碼
·在1976之前,全部的加密方法都是同一種模式:加密和解密使用同一種算法。在交互數據的時候,彼此通訊的雙方就必須把規則告訴對方,不然沒法解密。那麼加密和解密的規則(簡稱 密鑰*【mì yuè】*),它的保護就顯得尤爲重要。傳遞密鑰成了最大的隱患。這種加密方式稱爲對稱加密算法加密
·1976年,兩位美國計算機學家迪菲(Bailey Whitfield Diffie)、赫爾曼(Martin Edward Hellman)提出了一種嶄新構思,能夠在不傳遞密鑰的狀況下,完成密鑰交換。這被稱爲「迪菲-赫爾曼密鑰交換(英語:Diffie–Hellman key exchange,縮寫爲D-H)」算法,開啓了密碼學研究的新方向。spa
·1977年三位麻省理工學院的數學家羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一塊兒設計了一種算法,能夠實現非對稱加密。這個算法用他們三我的的姓氏首字母命名,叫作RSA算法。設計
先看下面一個取模運算的例子(取模運算叫作時鐘運算,咱們也常稱爲取餘數運算,運算符爲'mod',簡寫爲'%')3d
若是取一個質數n作模數,好比n=17,再找一個小於n的質數m,好比m=3,則有一個數學的規律:若是3的k次方,知足當k是小於17的正整數的時候,好比k在1~16中間取,知足 m ^ k % n 的結果在1~(n-1)中間隨機的時候(這個隨機是分別對應,不會重複!),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,結果r就在1~(17 -1)範圍內取值)
複製代碼
根據上面的例子思考:好比讓你完成填空 3 ^ k mod 17 = 12;(m爲正整數),那麼m的值能夠取13;
由於3的13次方模17等於12,k能夠取值爲13,可是k還能夠取其餘的值,使3的k次方模17等於12,這個等式從左邊推理:3 ^ 13 mod 17 等於12,可是這個等式反過來推k的值,就是不肯定的一個值,k=13只是其中的一個值,密碼學中要經過這個等式來推出肯定的k的值(好比逆推出k=13),就會很是的難,而且難度會隨着取模的質數(例子中17這個數)的增大而增長,這個問題就是離散對數問題。若是取模的質數k(例子中是17這個數)很是大,長達幾百位,那麼就算你知道整個表達式的結果和算法,在比較有限的時間內,想要反推k的值,基本是不可能的。
一、歐拉函數
質數的概念:只能被1和本身整除的正整數,好比2,3,5,7,11... 互質關係:若是兩個正整數,除了1以外,沒有其餘公因數,咱們就稱這兩個數是互質關係。
那麼問題來了,思考一下: 給定任意正整數n,請問在小於等於n的正整數之中,有多少個與n能構成互質關係?
如:
計算8的歐拉函數,小於等於8的數一、二、三、四、五、六、七、8中和8互質的有1,3,5,7
因此:φ(8) = 4;
計算7的歐拉函數,小於等於7的數一、二、三、四、五、六、7中和7互質的有1,2,3,4,5,6
因此:φ(7) = 6;
計算6的歐拉函數,小於等於6的數一、二、三、四、五、6中和6互質的有一、5
因此:φ(6) = 2;
計算5的歐拉函數,小於等於5的數一、二、三、四、5中和5互質的有1,2,3,4
因此:φ(5) = 4;
計算56的歐拉函數
φ(56)= φ(8) * φ(7) = 4 * 6 = 24;
複製代碼
計算這個值的方式叫作歐拉函數,使用:*φ(n)*表示
歐拉函數特色:
1、當n是質數的時候,φ(n) = n - 1;
2、若是n能夠分解成兩個互質的整數之積,如n = A * B;(A和B互質),則:
φ(A * B) = φ(A) * φ(B);
根據以上兩點能獲得:
若是N是兩個質數P1和P2的乘積,則:
φ(N) = φ(P1) * φ(P2) = (P1 - 1) * (P2 - 1);
複製代碼
因此上面φ(56)= φ(8) * φ(7) = 4 * 6 = 24;
二、歐拉定理
若是兩個正整數m和n互質,那麼m的φ(n)次方減去1,能夠被n整除。
複製代碼
歐拉定理公式:
三、費馬小定理
費馬小定理屬於歐拉定理的特殊狀況:
若是兩個正整數 m 和 n 互質,而且 n 爲質數!那麼φ(n)的結果就是 n - 1 ;
複製代碼
費馬小定理公式:
一、模反元素
若是兩個正整數 e 和 x 互質,那麼必定能夠找到整數 d , 使得ed - 1 被 x 整除,那麼 d 就是 e 對於 x 的 「模反元素」
複製代碼
模反元素公式:
二、公式推導
根據上面模反元素的性質,e 是和 x 互質;
若是x == φ(n), 也就是 e 和 φ(n)互質;
套入模反元素的公式推理就能得出最後的公式:
到這裏我提醒一下:m 通過一系列變換仍然可以還原成 m ,只須要知足兩個條件,這兩個條件是公式轉化的必要條件
一、m 和 n 互質
二、e 和 φ(n)互質
複製代碼
推理的過程當中 d 是 e 對於 x 的模反元素,x = φ(n)的時候知足公式轉化, 因此 d 也是 e 對於 φ(n) 的模反元素;可是因爲 d 是 模反元素,因此上述兩個條件中的第一個條件,m 和 n 即便沒有互質關係,該等式同樣能夠成立,可是須要須要知足另一個條件 m < n;具體驗證可自行驗證一下(數學家驗證過的定理)
因此獲得了最終的公式及知足公式的條件
公式:
條件:
一、 m 小於 n
二、 e 和 φ(n) 互質
複製代碼
一、密鑰交換原理圖及流程示意圖(實質上就是拆分了歐拉定理)
二、RSA算法
m ^ e mod n = c 加密
c ^ d mod n = m 解密
公鑰:n 和 e ,主要是 e
私鑰:n 和 d ,主要是 d
明文:m
密文:c
複製代碼
三、RSA算法說明
一、n會很是大,長度通常爲1024個二進制位。(目前人類已經分解的最大整數,232個十進制位,768個二進制位)
二、因爲須要計算出φ(n),因此根據歐拉函數的特色,最簡單的方式n由兩個質數相乘獲得,質數p1,p2
φ(n) = (p1 - 1) * (p2 - 1);
三、最終由φ(n)獲得 e 和 d。
總共生成6個數字:p一、p二、n、φ(n)、 e 、 d
複製代碼
四、RSA安全問題
除了公鑰用到了 n 和 e,其他的四個數字是不公開的。
目前破解RSA獲得d的方式以下:
一、要想求出私鑰d。因爲e * d = φ(n) * k + 1 ; 必需要知道e 和 φ(n);
二、e 是知道的,可是要獲得 φ(n),必須知道 p1和p2;
三、因爲n = p1 * p2; 只有把 n 因式分解才能算出來; 可是由於 n 很是大,分解成兩個質數的難度不言而喻,和暴力破解差很少,只能不斷的去嘗試。
複製代碼
五、RSA延伸應用思考
因爲RSA原理算法推導,最開始就有一個條件,就是 m < n, 儘管n會取很是大,可是理論上仍然會限制RSA加密的使用,因此RSA加密不適用於加密很是很是大的數據,效率比較低,通常結合其餘加密方式來加密關鍵部分的數據。好比加密key,數字簽名
1、終端加密指令OpenSSL使用RSA: 因爲Mac系統內置OpenSSL(開源加密庫),因此咱們直接在終端上使用命令來玩RSA,OpenSSL公開庫中RSA算法經常使用命令主要有三個:
命令1:genrsa -> 生成並輸入一個RSA私鑰
命令2:rsautl -> 使用RSA密鑰進行加密、解密、簽名和驗證等運算
命令3:處理RSA密鑰的格式轉換等問題
複製代碼
一、生成RSA私鑰,密鑰長度爲1024bit,私鑰文件名爲private.pem
openssl genrsa -out private.pem 1024
複製代碼
二、從私鑰中提取公鑰
openssl rsa -in private.pem -pubout -out public.pem
複製代碼
三、將私鑰private.pem轉化成爲明文private.txt文件
openssl rsa -in private.pem -text -out private.txt
複製代碼
四、經過公鑰文件public.pem加密明文文件message.txt,生成enc.txt
openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enc.txt
複製代碼
五、經過私鑰文件private.pem解密公鑰加過密的文件enc.txt並生成解密以後的文件dec.txt
openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt
複製代碼
2、終端加密實踐實例
實例我在裏面加入了各步驟的註釋含義
步驟1. cd到一個文件夾下
battleMage:~ battleMage$ cd /Users/fightmaster/Desktop/RSA密碼學MacDown
步驟2. 生成私鑰並輸出一個叫private.pem的私鑰文件
battleMage:RSA密碼學MacDown battleMage$ openssl genrsa -out private.pem 1024
Generating RSA private key, 1024 bit long modulus
.++++++
..................++++++
e is 65537 (0x10001)
步驟3. 根據私鑰提取一個公鑰,並輸出一個叫public.pem的公鑰文件
battleMage:RSA密碼學MacDown battleMage$ openssl rsa -in private.pem -pubout -out public.pem
writing RSA key
步驟4. 輸出查看私鑰文件
battleMage:RSA密碼學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密碼學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密碼學MacDown battleMage$ openssl rsa -in private.pem -text -out private.txt
writing RSA key
步驟7.查看私鑰private.txt文件中的內容
battleMage:RSA密碼學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的須要加密的內容文件,編輯message.txt文件,隨意填寫一個示例文本,好比"密碼123456"
battleMage:RSA密碼學MacDown battleMage$ vi message.txt
步驟9. 將message.txt文件經過公鑰public.pem文件加密生成並輸出enc.txt文件
battleMage:RSA密碼學MacDown battleMage$ openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enc.txt
步驟10. 輸出enc.txt加密後的文件(看起來是亂碼)
battleMage:RSA密碼學MacDown battleMage$ cat enc.txt
n?9M?^?>???Nɏh?ϩ!?8{?]??????
??R룁'??3?D?6i??^ ?k6'?
F?>2?s>??Xx1?&\ٰ?x?
???? ?!m?2+'?x 步驟十一、經過私鑰private.pem文件解密enc.txt文件,並輸出解密後的dec.txt文件 battleMage:RSA密碼學MacDown battleMage$ openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt battleMage:RSA密碼學MacDown battleMage$ 複製代碼
上述步驟分別獲得的結果是: 步驟2:獲得的私鑰文件private.pem
步驟3:從私鑰中提取出來的公鑰文件public.pem
步驟6:輸出查看的私鑰txt文件 private.txt
步驟8:生成一個須要加密的message.txt文件,編輯內容爲"密碼123456"
步驟9:message.txt經過公鑰文件public.pem加密並輸出對應的加密文件enc.txt
步驟11:經過私鑰private.pem解密以前加密的密文enc.txt,並生成解密後的文件dec.txt
若是咱們想要使用RSA算法,那麼咱們須要對應的證書文件,可是在項目開發中,蘋果是不容許咱們直接使用pem證書的,咱們要生成對應的crt文件 須要屢次填寫證書的信息,好比下面的國家,省,市,組織信息,郵箱Email,還有證書額外的密碼
/Users/fightmaster/Desktop/RSA密碼學MacDown/終端操做演示文件
步驟1:根據私鑰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:根據.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文件,及設置p.p12文件打開的密碼(密碼能夠不設置)
battleMage:終端操做演示文件 battleMage$ openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
Enter Export Password:
Verifying - Enter Export Password:
battleMage:終端操做演示文件 battleMage$
複製代碼
終端演示生成文件以下
base64只是一種編碼方案,根據base64對照表將任意的二進制進行編碼;base64主要是爲了查看二進制,只是二進制的一種表現形式
base64 總共 65種字符,0~9,a~z,A~Z還有'+','/'和'=',將二進制以每6個爲一組進行編碼;
base64編碼表中只有64個字符,編碼表中不包含'=','='是隱含的第65個字符,'='是用來補足最後拆成6位不足的
好比原二進制 0101 1000 0101 0101 0001 通過base64以6位爲分割,變成 010110 000101 010100 01 不足6位後都補0,變成 010110 000101 010100 010000 由於存儲的時候,內存須要對齊,因此可能最後幾個補齊的位置爲 010110 000101 010100 010000 000000 000000
後面的這種形式的'000000'就會被替換爲'=';因此base64編碼通常都很明顯,最後幾位通常都是'=';
下面是base64位編碼表:
iOS中OC使用base64的代碼示例以下
一、base64編碼
- (NSString *)customBase64Encode:(NSString *)encodeText {
NSData * data = [encodeText dataUsingEncoding:NSUTF8StringEncoding];
NSString * tempStr = [data base64EncodedStringWithOptions:0];
return tempStr;
}
複製代碼
二、base64解碼
- (NSString *)customBase64Decode:(NSString *)decodeText {
NSData * data = [[NSData alloc] initWithBase64EncodedString:decodeText options:(0)];
NSString * tempStr = [data base64EncodedStringWithOptions:0];
return tempStr;
}
複製代碼
好啦今天就到這裏啦~下一篇是哈希算法,看完有收穫,點個贊謝謝啦~