天天看点

ios RSA 非对称加密

加密方式

  • 公钥加密私钥解密
  • 私钥加密公钥解密

    -优点:安全

    -缺点:速度慢

非对称加密算法

  1. 找出两个很大的质素P和Q
  2. N = P*Q
  3. M = (P-1)*(Q-1)
  4. 计算公钥:找出整数E, E与M互质,即除了1以外没有其它公约数(特点:公钥简单,通常可以公开)
  5. 私钥:找出整数D,使得(E*D)%M=1(特点:私钥复杂,通常私家珍藏)
  6. 加密:(X^E)%N = Y (X是明文,Y是密文)
  7. 解密:(Y^D)%N = X (X是明文,Y是密文)
公开秘钥的好处?
  • 简单:就是一些乘除而已
  • 可靠:
    1. 不论给出多少份明文和对应的密文,也无法根据已知的明文和密文的对应关系,破译出下一份密文
    2. N和E可以公开给任何人加密使用,但是只有掌握密钥D的人才可以解密,即使加密者自己也无法解密
  • 灵活:可以产生很多的公钥E和私钥D的组合给不同的加密者

数字签名

  • 发送方:
    1. “报文”->hash->“报文摘要”
    2. “报文摘要”用公钥加密(数字签名)+报文发送给接受方
  • 接受方
    1. “报文”->hash->“报文摘要”
    2. "数字签名"用私钥解密,用解密后的摘要与自己生成摘要做对比

PCKS

简介:Public-Key Cryptography Standards (PKCS)是由美国 RSA 数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议

  • 几个重要的协议

    PKCS#12: 描述个人信息交换语法标准。描述了将用户公钥、私钥、证书和其他相关信息打包的语法 苹果的开发者证书也俗称 P12

    PKCS#8 描述私有密钥信息格式,该信息包括公开密钥算法的私有密钥以及可选的属性集等 JAVA加密只支持 PK 8

程序开发证书生成

程序开发证书生成

  1. 生成私钥

    openssl req -new -key ca.key -out rsacert.csr

    查看
    ios RSA 非对称加密
  2. 创建证书请求

    openssl req -new -key ca.key -out rsacert.csr

  3. 生成证书并签名,有效期10年

    openssl x509 -req -days 3650 -in rsacert.csr -signkey ca.key -out rsacert.crt

  4. 转换格式(将PEM格式转化为DER格式)

    openssl x509 -outform der -in rsacert.crt -out rsacert.der

    ios RSA 非对称加密
  5. 导入P12文件

    openssl pkcs12 -export -out p.p12 -inkey ca.key -in rsacert.crt

    ios RSA 非对称加密
    在xcode查看der文件
    ios RSA 非对称加密

iOS中相关函数

使用公钥对数据加密 SecKeyEncrypt

使用私钥对数据解密 SecKeyDecrypt

使用公钥对数字签名进行验证 SecKeyRawVerify

使用私钥生成数据签名 SecKeyRawSign

注意:

iOS中不能使用PEM格式的证书

OpenSSL默认生成的都是PEM格式的证书

附:iOS非对称加密demogithub链接

继续阅读