直接上密码学入门级知识部分,今天的内容如下:
1、密码学概述
2、离散对数问题
3、欧拉函数、欧拉定理、费马小定理
4、模反元素&公式推导
5、迪菲赫尔曼密钥交换
6、终端演示:RSA加密
7、证书生成
8、base64编码
一、密码学概述与发展历史
1、密码学的概述
密码学是指研究信息加密,破解密码的一门技术科学。
2、密码学的主要发展历史:
密码学的起源可追溯至2000年前,而当今的密码学是以数学为基础的。
密码学的起源:相传古罗马名将凯撒大帝为了防止别人截获情报,用密码传送情报。凯撒的做法很简单,就是对二十几个罗马字母建立一张对应表。这样,如果不知道密码本,即使截获一段信息也看不懂。密码学也正是在编码与破译的斗争实践中逐步发展起来的。
·从凯撒大帝时代到上世纪70年代这段很长的时间里,密码学发展的十分缓慢,因为设计者基本上靠经验,没有运用数学原理。
·在1976以前,所有的加密方法都是同一种模式:加密和解密使用同一种算法。在交互数据的时候,彼此通信的双方就必须把规则告诉对方,否则无法解密。那么加密和解密的规则(简称 密钥【mì yuè】),它的保护就显得尤其重要。传递密钥成了最大的隐患。这种加密方式称为对称加密算法
·1976年,两位美国计算机学家迪菲(Bailey Whitfield Diffie)、赫尔曼(Martin Edward Hellman)提出了一种崭新构思,可以在不传递密钥的情况下,完成密钥交换。这被称为“迪菲-赫尔曼密钥交换(英语:Diffie–Hellman key exchange,缩写为D-H)”算法,开启了密码学研究的新方向。
·1977年三位麻省理工学院的数学家罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起设计了一种算法,可以实现非对称加密。这个算法用他们三个人的姓氏首字母命名,叫做RSA算法。
二、离散对数问题
先看下面一个取模运算的例子(取模运算叫做时钟运算,我们也常称为取余数运算,运算符为'mod',简写为'%')
如果取一个质数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、欧拉函数
质数的概念:只能被1和自己整除的正整数,比如2,3,5,7,11...
互质关系:如果两个正整数,除了1之外,没有其他公因数,我们就称这两个数是互质关系。
那么问题来了,思考一下:
给定任意正整数n,请问在小于等于n的正整数之中,有多少个与n能构成互质关系?
如:
计算8的欧拉函数,小于等于8的数1、2、3、4、5、6、7、8中和8互质的有1,3,5,7
所以:φ(8) = 4;
计算7的欧拉函数,小于等于7的数1、2、3、4、5、6、7中和7互质的有1,2,3,4,5,6
所以:φ(7) = 6;
计算6的欧拉函数,小于等于6的数1、2、3、4、5、6中和6互质的有1、5
所以:φ(6) = 2;
计算5的欧拉函数,小于等于5的数1、2、3、4、5中和5互质的有1,2,3,4
所以:φ(5) = 4;
计算56的欧拉函数
φ(56)= φ(8) * φ(7) = 4 * 6 = 24;
计算这个值的方式叫做欧拉函数,使用:φ(n)表示
欧拉函数特点:
一、当n是质数的时候,φ(n) = n - 1;
二、如果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;
2、欧拉定理
如果两个正整数m和n互质,那么m的φ(n)次方减去1,可以被n整除。
欧拉定理公式:
欧拉定理公式.png3、费马小定理
费马小定理属于欧拉定理的特殊情况:
如果两个正整数 m 和 n 互质,并且 n 为质数!那么φ(n)的结果就是 n - 1 ;
费马小定理公式:
费马小定理公式.png四、模反元素&公式推导
1、模反元素
如果两个正整数 e 和 x 互质,那么一定可以找到整数 d , 使得ed - 1 被 x 整除,那么 d 就是 e 对于 x 的 “模反元素”
模反元素公式:
模反元素公式.png2、公式推导
公式转换.png 模反元素公式转换.png根据上面模反元素的性质,e 是和 x 互质;
如果x == φ(n), 也就是 e 和 φ(n)互质;
套入模反元素的公式推理就能得出最后的公式:
最终公式.png到这里我提醒一下:m 经过一系列变换仍然能够还原成 m ,只需要满足两个条件,这两个条件是公式转化的必要条件
1、m 和 n 互质
2、e 和 φ(n)互质
推理的过程中 d 是 e 对于 x 的模反元素,x = φ(n)的时候满足公式转化, 所以 d 也是 e 对于 φ(n) 的模反元素;但是由于 d 是 模反元素,所以上述两个条件中的第一个条件,m 和 n 即使没有互质关系,该等式一样可以成立,但是需要需要满足另外一个条件 m < n;具体验证可自行验证一下(数学家验证过的定理)
所以得到了最终的公式及满足公式的条件
公式:
最终公式.png条件:
1、 m 小于 n
2、 e 和 φ(n) 互质
五、迪菲赫尔曼秘钥交换
1、密钥交换原理图及流程示意图(实质上就是拆分了欧拉定理)
RSA原理.png RSA原理示意图.png2、RSA算法
m ^ e mod n = c 加密
c ^ d mod n = m 解密
公钥:n 和 e ,主要是 e
私钥:n 和 d ,主要是 d
明文:m
密文:c
3、RSA算法说明
1、n会非常大,长度一般为1024个二进制位。(目前人类已经分解的最大整数,232个十进制位,768个二进制位)
2、由于需要计算出φ(n),所以根据欧拉函数的特点,最简单的方式n由两个质数相乘得到,质数p1,p2
φ(n) = (p1 - 1) * (p2 - 1);
3、最终由φ(n)得到 e 和 d。
总共生成6个数字:p1、p2、n、φ(n)、 e 、 d
4、RSA安全问题
除了公钥用到了 n 和 e,其余的四个数字是不公开的。
目前破解RSA得到d的方式如下:
1、要想求出私钥d。由于e * d = φ(n) * k + 1 ; 必须要知道e 和 φ(n);
2、e 是知道的,但是要得到 φ(n),必须知道 p1和p2;
3、由于n = p1 * p2; 只有把 n 因式分解才能算出来; 但是因为 n 非常大,分解成两个质数的难度不言而喻,和暴力破解差不多,只能不断的去尝试。
5、RSA延伸应用思考
由于RSA原理算法推导,最开始就有一个条件,就是 m < n, 尽管n会取非常大,但是理论上仍然会限制RSA加密的使用,所以RSA加密不适用于加密非常非常大的数据,效率比较低,一般结合其他加密方式来加密关键部分的数据。比如加密key,数字签名
六、终端演示:RSA加密
一、终端加密指令OpenSSL使用RSA:
由于Mac系统内置OpenSSL(开源加密库),所以我们直接在终端上使用命令来玩RSA,OpenSSL公开库中RSA算法常用命令主要有三个:
命令1:genrsa -> 生成并输入一个RSA私钥
命令2:rsautl -> 使用RSA密钥进行加密、解密、签名和验证等运算
命令3:处理RSA密钥的格式转换等问题
1、生成RSA私钥,密钥长度为1024bit,私钥文件名为private.pem
openssl genrsa -out private.pem 1024
2、从私钥中提取公钥
openssl rsa -in private.pem -pubout -out public.pem
3、将私钥private.pem转化成为明文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密码学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
步骤11、通过私钥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
步骤2:得到的私钥文件private.png
步骤3:从私钥中提取出来的公钥文件public.pem
步骤3:从私钥中提取出来的公钥文件public.png步骤6:输出查看的私钥txt文件 private.txt
步骤6:输出查看的私钥txt文件 private.txt .png步骤8:生成一个需要加密的message.txt文件,编辑内容为"密码123456"
步骤8:生成一个需要加密的message.txt文件.png步骤9:message.txt通过公钥文件public.pem加密并输出对应的加密文件enc.txt
步骤9:message.txt通过公钥文件public.pem加密并输出对应的加密文件enc.png步骤11:通过私钥private.pem解密之前加密的密文enc.txt,并生成解密后的文件dec.txt
步骤11:通过私钥private.pem解密之前加密的密文enc.txt,并生成解密后的文件dec.png七、证书生成
如果我们想要使用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$
终端演示生成文件如下
步骤1,生成的证书请求文件.png 步骤2,根据请求文件申请的证书文件.png 步骤3,根据证书文件导出的p.p12文件.png八、base64编码
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位编码表:
base64编码表.pngiOS中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;
}
今天就到这里,看完有收获,点个赞谢谢啦~
网友评论