持续创作,加快成长!这是我参加「日新方案 10 月更文挑战」的第2天,点击查看活动详情

导言

  1. 对称加密算法:数据发送方将明文和密钥一同经过特别加密算法处理成密文后,将它发送出去。接收方收到密文后,若想解读原文,则需求运用加密用到的相同密钥及相同算法的逆算法对密文进行解密,才干使其恢复成原文。

最典型的问题便是怎么同步这个密钥,同步进程假如在公网上,不进行加密是可以抓包拿到的,那么这里就遇到了要对密钥加密的问题。

常见的对称加密算法有 AES、DES、Blowfish

  1. 非对称加密算法:假如用公钥进行加密,只有用对应的私钥才干解密;假如用私钥进行加密,只有用对应的公钥才干解密。比如,私钥签名、公钥验签;公钥加密、私钥解密。

一般公钥是揭露的,或许一同多人持有。

非对称加密算法完成秘要信息的交换进程为:甲方生成一对密钥并将其间一个作为公钥向其他方揭露;得到该公钥的乙方运用该密钥对秘要信息进行加密后发送给甲方;甲方再用自己的另一个专用密钥对加密后的信息进行解密。

I RSA算法流程

RSA是最有名的非对称加密算法,公钥和私钥之间是根据数论常识生成的。

1.1 算法原理

数论常识:给出两个素数,很简单将它们相乘,然而给出它们的乘积,想得到这两个素数就显得尤为困难。

RSA加密算法的原理是对一极大整数做因数分解的困难性来保证安全,假如能够处理大整数(比如几百位的整数)分解的快速办法,那么 RSA 算法将轻易被破解。

非对称加密跟着密钥变长,安全性上升的一同性能也会有所下降。

RSA加密对明文的长度有所约束,规则需加密的明文最大长度=密钥长度-11(单位是字节,即byte),所以在加密和解密的进程中需求分块进行。

而密钥默许是1024位,即1024位/8位-11=128-11=117字节。所以默许加密前的明文最大长度117字节,解密密文最大长度为128字。

那么为啥两者相差11字节?是因为RSA加密运用到了填充形式(padding),即内容不足117字节时会主动填满,用到填充形式自然会占用一定的字节,并且这部分字节也是参加加密的。

1.2 公钥和私钥的生成

步骤:

  1. 预备两个非常大的素数 p和 q(转化成二进制后,或许更多位数,位数越多越难破解)。
  2. 使用字符串模拟核算大素数 p和q的乘积 n=pq。
  3. 同样办法核算 m=(p-1)(q-1),这里的m 为n 的欧拉函数;
  4. 找到一个数e(1<e<m) ,满足 gcd(m,e)=1(即 e 和 m 互素)
  5. 核算e 在模m 域上的逆元d (即满足 ed mod m=1)
  6. (n,e) 为公钥,(n,d) 为私钥;

需求的文件(iOS专用): 由rsa_private_key.pem生成csr -> 生成crt -> 生成der -> 生成p12

    ios     ==> rsacert.der             rsa加密、sha验签
    ios     ==> p.p12                   rsa解密、sha加签

RSA密钥生成指令:

  1. 创立整数恳求: openssl>req -new -key rsa_private_key.pem -out rsacert.csr

  2. 生成整数并签名,10年有效期: openssl>x509 -req -days 3650 -in rsacert.csr -signkey rsa_private_key.pem -out rsacert.crt

  3. 转化格式:将 PEM 格式文件转化成 DER 格式 (公钥) openssl>x509 -outform der -in rsacert.crt -out rsacert.der

  4. 导出P12文件 (私钥) openssl>pkcs12 -export -out p.p12 -inkey rsa_private_key.pem -in rsacert.crt

注意:“>”符号后面的才是需求输入的指令。

1.3 RSA 加密

关于明文x ,用公钥 (n,e) 对x 加密的进程,便是将x 转化成数字(字符串的话取其 ASCII码、base64b编码或许 unicode 值),然后通过幂取模核算出密文y 。

iOS小技能:RSA签名、验签、加密、解密的原理

1.4 RSA 解密

关于密文y ,用私钥(n,d) 对y进行解密,和加密相似,同样是核算幂取模;

iOS小技能:RSA签名、验签、加密、解密的原理

1.5 RSA加密、签名区别

  加密和签名都是为了安全性考虑,加密是为了防止信息被走漏,而签名是为了防止信息被篡改。

1.6 RSA签名的进程

  1. A生成一对密钥(公钥和私钥),私钥不揭露,A自己保留。公钥揭露,任何人可以获取。
  2. A用自己的私钥对音讯加签,形成签名sign,并将加签的音讯和音讯自身一同传递给B。
  3. B收到音讯后,在获取A的公钥进行验签,假如验签出来的内容与音讯自身共同,证明音讯是A回复的。

II 代码完成

2.1 RSA签名算法和加密算法的完成

blog.csdn.net/z929118967/…

2.2 恳求参数按照ASCII码从小到大排序

iOS 安全标准攻略之【对恳求参数进行签名】恳求参数按照ASCII码从小到大排序、拼接、加密(采用递归的方法进行完成)使用案例:条码付出综合前置平台申请退款

demo地址:download.csdn.net/download/u0…

  1. demo 数组用[]表明,目标(字典)用{} 表明进行排序拼接。
  2. 数组排序可选,数组内部,只对字符串元素进行排序,并不与字典key参加排序。 字典和数组独立排序

———————————————— 版权声明:本文为CSDN博主「iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请>附上原文出处链接及本声明。 原文链接:blog.csdn.net/z929118967/…

see also

公号:iOS逆向

相关关键词:EncryptsignRSA

iOS小技能:RSA签名、验签、加密、解密的原理