美文网首页
iOS逆向攻防之密码学基础及RSA数学原理、Base64编码

iOS逆向攻防之密码学基础及RSA数学原理、Base64编码

作者: 溪浣双鲤 | 来源:发表于2019-10-04 15:42 被阅读0次

    直接上密码学入门级知识部分,今天的内容如下:

    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整除。
    
    

    欧拉定理公式:

    欧拉定理公式.png

    3、费马小定理

    费马小定理属于欧拉定理的特殊情况:

    如果两个正整数 m 和 n 互质,并且  n 为质数!那么φ(n)的结果就是 n - 1 ;
    
    

    费马小定理公式:

    费马小定理公式.png

    四、模反元素&公式推导


    1、模反元素

    如果两个正整数 e 和 x 互质,那么一定可以找到整数 d , 使得ed - 1 被 x 整除,那么 d 就是 e 对于 x 的 “模反元素”
    
    

    模反元素公式:

    模反元素公式.png

    2、公式推导

    公式转换.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原理示意图.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个二进制位。(目前人类已经分解的最大整数,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编码表.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;
    }
    
    

    今天就到这里,看完有收获,点个赞谢谢啦~

    溪浣双鲤的技术摸爬滚打之路

    相关文章

      网友评论

          本文标题:iOS逆向攻防之密码学基础及RSA数学原理、Base64编码

          本文链接:https://www.haomeiwen.com/subject/sffdpctx.html