加密方式
- 公钥加密私钥解密
- 私钥加密公钥解密
-优点:安全
-缺点:速度慢
非对称加密算法
- 找出两个很大的质素P和Q
- N = P*Q
- M = (P-1)*(Q-1)
- 计算公钥:找出整数E, E与M互质,即除了1以外没有其它公约数(特点:公钥简单,通常可以公开)
- 私钥:找出整数D,使得(E*D)%M=1(特点:私钥复杂,通常私家珍藏)
- 加密:(X^E)%N = Y (X是明文,Y是密文)
- 解密:(Y^D)%N = X (X是明文,Y是密文)
公开秘钥的好处?
- 简单:就是一些乘除而已
- 可靠:
- 不论给出多少份明文和对应的密文,也无法根据已知的明文和密文的对应关系,破译出下一份密文
- N和E可以公开给任何人加密使用,但是只有掌握密钥D的人才可以解密,即使加密者自己也无法解密
- 灵活:可以产生很多的公钥E和私钥D的组合给不同的加密者
数字签名
-
发送方:
- “报文”->hash->“报文摘要”
- “报文摘要”用公钥加密(数字签名)+报文发送给接受方
-
接受方
- “报文”->hash->“报文摘要”
- "数字签名"用私钥解密,用解密后的摘要与自己生成摘要做对比
PCKS
简介:Public-Key Cryptography Standards (PKCS)是由美国 RSA 数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议
- 几个重要的协议
PKCS#12: 描述个人信息交换语法标准。描述了将用户公钥、私钥、证书和其他相关信息打包的语法 苹果的开发者证书也俗称 P12
PKCS#8 描述私有密钥信息格式,该信息包括公开密钥算法的私有密钥以及可选的属性集等 JAVA加密只支持 PK 8
程序开发证书生成
程序开发证书生成
- 生成私钥
openssl req -new -key ca.key -out rsacert.csr
查看
- 创建证书请求
openssl req -new -key ca.key -out rsacert.csr
- 生成证书并签名,有效期10年
openssl x509 -req -days 3650 -in rsacert.csr -signkey ca.key -out rsacert.crt
- 转换格式(将PEM格式转化为DER格式)
openssl x509 -outform der -in rsacert.crt -out rsacert.der
- 导入P12文件
openssl pkcs12 -export -out p.p12 -inkey ca.key -in rsacert.crt
在xcode查看der文件
iOS中相关函数
使用公钥对数据加密 SecKeyEncrypt
使用私钥对数据解密 SecKeyDecrypt
使用公钥对数字签名进行验证 SecKeyRawVerify
使用私钥生成数据签名 SecKeyRawSign
注意:
iOS中不能使用PEM格式的证书
OpenSSL默认生成的都是PEM格式的证书
附:iOS非对称加密demogithub链接