美文网首页iOS开发技术开发中有帮助的iOS文章信息安全
iOS RSA加密、解密、分段加密、分段解密

iOS RSA加密、解密、分段加密、分段解密

作者: GC风暴 | 来源:发表于2017-01-17 15:56 被阅读783次

    一、首先需要公钥、私钥, 以及传递给 java后端的私钥,
    我们在这里使用openSSL在终端生成所需要的公私钥, 步骤如下:

    • 操作1:
      生成本地私钥, 用于本地解密
      1024位 = 128字节 (即最多一次可以加密128-1 字节的数据, 也可以是2048位)
      // #!/usr/bin/env bash
      // echo "Generating RSA key pair ..."
      // echo "1024 RSA key: private_key.pem"
      终端输入:

    openssl genrsa -out private_key.pem 1024```

    • 操作2:
      echo "create certification require file: rsaCertReq.csr"

    openssl req -new -key private_key.pem -out rsaCertReq.csr```

    操作3:秘钥有效期10年
    echo "create certification using x509: rsaCert.crt"

    openssl x509 -req -days 3650 -in rsaCertReq.csr -signkey private_key.pem -out rsaCert.crt

    
    操作4:iOS本地用于加密的der文件
    echo "create public_key.der For IOS"
    > ```
    openssl x509 -outform der -in rsaCert.crt -out public_key.der``` 
    
    操作5:本地用于解密的私钥  p12文件
    echo "create private_key.p12 For IOS. Please remember your password. The password will be used in iOS."
    > ```
    openssl pkcs12 -export -out private_key.p12 -inkey private_key.pem -in rsaCert.crt```
    
    操作6:
    echo "create rsa_public_key.pem For Java"
    > ```
    openssl rsa -in private_key.pem -out rsa_public_key.pem -pubout```
    
    操作7: 此秘钥发给后台用于解密
    echo "create pkcs8_private_key.pem For Java"
    > ```openssl pkcs8 -topk8 -in private_key.pem -out pkcs8_private_key.pem -nocrypt```
    
    到此生成证书和公司要的步骤结束 -->||
    --- --- 
    --- --- 
    二、下载加密类文件 
       [点击下载iOS加密类文件 + Base64编码库](https://github.com/initKing/Base64_Code_Lib/tree/master) 
    
    ## 仔细阅读链接的README文件,有具体的使用方法!
    
    * 生成加密类实例
    ```RSAEncryptor * rsa = [[RSAEncryptor alloc] init];```
    
    获取公钥路径(注意拖拽公钥的时候,记得将“添加到目标”选项打钩,否则通过[Bundle mainBundle]查询不到公钥的路径)
    ```NSString * publicKeyPath = [[NSBundle mainBundle] pathForResource:@“public_key”ofType:@“der”];```
    
    * 加载公钥
    ```[rsa loadPublicKeyFromFile:publicKeyPath];```
    ```NSString * parm1 = @“need to encript string”;```
    
    * 对参加加密
    ```NSString * encParam1 = [rsa rsaEncryptString:parm1];```
    
    #### 关于待机密数据过长问题-分段加密-分段解析实施思路
    
    > 1. 然后将加密后的密文传递给后台
    
    > 2. 如果需要加密的数据长度过长(超过128字节),那么会导致数据加密不完全,无法完全解析
    
    > 3. 解决办法就是:对待加密的数据进行'分段加密'
    
    ```NSString *param = @"this is a long string, or other kind of objects, in the final analysis this is a long long string or object neet to encript, more than 128 byte";```
    
    * 分割字符串:
    
    NSString *segment1 = @"this is a long string, or other kind of objects,";
    NSString *segment2 = @" in the final analysis this is a long long string or object neet to encript, more than 128 byte";
    
    * 然后分别加密:
    
      ```NSString *encString1 = [rsa rsaEncryptString:segment1];```
    
    ```NSString *encString2 = [rsa rsaEncryptString:segment2];```
    
    * 然后将加密后的密文拼接,中间可以加个空格,方便后台根据空格分割密文,进行分段解析
    
    NSString *result = [NSString stringWithFormat:@"%@ %@",encString1, encString2];

    相关文章

      网友评论

      • 谢谢生活:好吧,这样也可以了,我们是把数据转成二进制数据,再对数据流分段加密的,
        谢谢生活:@屋里有怪兽 要分段加密的。
        屋里有怪兽:为什么要转成二进制数据啊
        GC风暴:@谢谢生活 数据过长的话是要进行分段加密的

      本文标题:iOS RSA加密、解密、分段加密、分段解密

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