iOS - 加解密相关

密码学

2018-07-16  本文已影响0人  Superman168

Base64

在申请证书的时候,需要生成一个根证书,现在查看一下:

cat 根证书CertificateSigningRequest.certSigningRequest

cat 根证书CertificateSigningRequest.certSigningRequest
-----BEGIN CERTIFICATE REQUEST-----
MIICfTCCAWUCAQAwODEYMBYGCSqGSIb3DQEJARYJ5qC56K+B5LmmMQ8wDQYDVQQD
DAbpvZDotoUxCzAJBgNVBAYTAkNOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAvfNalljsxRNkvJ65sm8RP6kGylEHDsuARbVxfitXbyKCUWNCMvsR3/fB
ORM5mizjRueKzxQh4CoWLMc4R2udio7RZSp2jaMzPSHxTj7DEMTIEHLp3W3wjZwR
q1WDwNsHpnGigd2bq6PWHv9vWBlaxcOToNA1mTPW3ZNOCktESoVRCg2Tymlf9tBo
4JZlo+FbOhKw2vcf+7D9oTu2yK+kB6xtrhX5z1J/Pet7A/AE6izLdqsQeLAtJAuW
VbbzrxHJpn3qpKYF8qHUS+wmQKYqWR9Y3Scerf+dv2Be5ynOlaBIKmSA00v9F+Vm
W2/GvMhj6qfrIj55u6HsIpfXsRWOTQIDAQABoAAwDQYJKoZIhvcNAQELBQADggEB
ADAOPBwi5NWluFVP1mzJM+je03VmmZORYrURWGBdXR2s9dkAKQ/WUf51eR+qA0dl
zDt+XFARBcr57PjQDuYa5y+1coOVmybNcoMTg4xnOQr9sJmNGfRCcx/1BKOEYfRp
K4Aiy2VqohV+mG7PtIR7UmctfkjUyyaeu0hF3ZhjXh3GogTY0+5vWeVxldRMht7e
ejs3EhQyy3ZGFNtgR9lBvOQJJYUgwnBDVrW406JFbY0AVWLdREhN0bp7odteIHjF
PH/v5601P+4UJiAjtziJ3dWJYBH9VUs3+47Zp5hiSgzVGXo/R64Q5kkpSREHjnCn
Z0Rd2z7UCTpS5BaNoLdMZ5Y=
-----END CERTIFICATE REQUEST-----

就是用的 base64 编码,加密的二进制的。

base64 加密测试

终端新建一个文件:

touch test.txt

编辑文件:

11111111
22222222
33333333

base64 编码

base64 test.txt -o base64.txt

结果:

MTExMTExMTEKMjIyMjIyMjIKMzMzMzMzMzM=

解码:

base64 base64.txt -o encode.text -D

结果:

11111111
22222222
33333333

Base64索引表

Base64表

A~Z,
a~z,
0~9,
+,/,
用于填充的 “=”
一共 65 个字符。

如此示例所示,Base64编码将三个八位字节转换为四个(6位字节)编码字符。

image.png

' ='可以添加填充字符以使最后一个编码块包含四个Base64字符。

image.png image.png

一般用于编码加密过后的 二进制数据。

哈希(散列)函数

加解密算法:

很好的解决了服务端与客户端的通信问题。(量子计算机可以用来暴力破解 RSA 加密。目前的最简单的 RSA 加密用目前的计算机需要大概 50 年以上破解)

RSA Open SSL 终端生成密钥

参考: 使用 openssl 生成证书
讲的很详细。

Open SSL 是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。
官网:https://www.openssl.org/source/

苹果内置了 Open SSL 类库,在终端中

openssl genrsa -out rsa_private.key 512

可以查看一下:

cat rsa_private.key

如下:

image.png

将私钥输出为 txt 文件,方便查看:

openssl rsa -in rsa_private.key -text -out private.txt

 Superman  ~/Desktop  openssl rsa -in rsa_private.key -text -out private.txt
writing RSA key
 Superman  ~/Desktop  cat private.txt
Private-Key: (512 bit)
modulus:
    00:cb:26:b9:0e:d8:f2:ba:89:5a:ee:b6:32:24:c5:
    b4:2a:0b:92:78:77:6a:cc:e9:fa:61:98:64:a5:9a:
    e5:1e:fd:71:ae:33:ed:3f:3e:f3:cf:b6:3f:5b:05:
    36:09:77:0d:4f:99:fe:cf:a3:cd:68:f4:1f:68:2b:
    43:45:93:08:0d
publicExponent: 65537 (0x10001)
privateExponent:
    00:9a:ff:c1:84:8d:8c:ad:3c:6d:8f:e2:9d:61:a7:
    22:ae:4d:c4:04:7c:00:95:b6:13:de:70:da:a1:ec:
    0b:d2:d6:e9:09:49:a7:3d:a1:c5:b5:1c:46:8c:10:
    0b:a8:ac:ad:d2:d6:4a:48:23:93:6e:8a:38:9b:be:
    e7:ef:92:c0:21
prime1:
    00:fd:18:0c:5e:cd:f4:4f:71:da:96:25:c0:2b:a1:
    fd:3c:46:e9:9a:5c:33:a2:e9:1c:0c:1d:a4:b0:64:
    af:ec:f5
prime2:
    00:cd:7b:df:21:6a:cf:5a:5e:00:61:93:a4:a0:71:
    7f:9c:06:f1:50:89:ca:9c:da:2d:7c:86:cd:64:16:
    4e:bf:b9
exponent1:
    6b:0a:ee:c0:72:0e:f0:42:d1:16:4b:e5:19:0f:2c:
    11:80:54:70:aa:aa:54:2e:8f:64:38:6d:5d:05:58:
    ba:b9
exponent2:
    00:a7:83:ab:64:7f:c1:a8:a6:e7:62:a4:cd:59:ab:
    0d:5f:f2:5c:f9:ce:4b:29:d1:c7:b1:33:e7:ef:07:
    2c:8d:a9
coefficient:
    5b:ae:a8:fd:46:5d:14:02:81:9a:19:d3:70:3d:21:
    69:19:ee:7f:0b:82:3e:26:b8:14:b0:41:87:37:79:
    d4:15
-----BEGIN RSA PRIVATE KEY-----
MIIBOwIBAAJBAMsmuQ7Y8rqJWu62MiTFtCoLknh3aszp+mGYZKWa5R79ca4z7T8+
88+2P1sFNgl3DU+Z/s+jzWj0H2grQ0WTCA0CAwEAAQJBAJr/wYSNjK08bY/inWGn
Iq5NxAR8AJW2E95w2qHsC9LW6QlJpz2hxbUcRowQC6isrdLWSkgjk26KOJu+5++S
wCECIQD9GAxezfRPcdqWJcArof08RumaXDOi6RwMHaSwZK/s9QIhAM173yFqz1pe
AGGTpKBxf5wG8VCJypzaLXyGzWQWTr+5AiBrCu7Acg7wQtEWS+UZDywRgFRwqqpU
Lo9kOG1dBVi6uQIhAKeDq2R/waim52KkzVmrDV/yXPnOSynRx7Ez5+8HLI2pAiBb
rqj9Rl0UAoGaGdNwPSFpGe5/C4I+JrgUsEGHN3nUFQ==
-----END RSA PRIVATE KEY-----

openssl rsa -in rsa_private.key -pubout -out rsa_public.key

RSA公钥

MD5

MD5 用来标识一个二进制数据,一个二进制数据(文件)只有一个 HASH 值,有可能多个二进制数据有同一个 hash 值。

可以用于验证,可以判断一个二进制数据有没有被修改过或者不一致。

md5 -s "Superman"

结果:
MD5 ("Superman") = 527d60cd4715db174ad56cda34ab2dce

数字签名就是这样的道理,MD5 后再 RSA 加密,传送到服务端,验证数据有没有被修改过

上一篇 下一篇

猜你喜欢

热点阅读