iOS RSA加密基础篇

作者: Afer | 来源:发表于2015-10-28 01:00 被阅读6638次

        如果可以不用加密,我更喜欢不加密。

    嘿嘿嘿,找静态库吧,找demo吧?先来一发:

    https://github.com/myafer/OpenSSLApplication

    1. Xcode配置 openssl 篇

    (1). 新建一个工程

    (2).导入openssl 这些选项一定要选对。有人勾选的是 Create folder refrences就变成蓝色的文件夹了,这里就不解释了,自己百度,Google 去。

    (3). 运行一下,会发现是会报错的。报的错误是头文件找不到,这是因为我们还没有配置openssl的library文件路径。那么我们接下来配置路径,先Show In Finder一下 看看我们的openssl在哪

    然后重点来了 ,我们把这个include拖到这个框里面,路径就配置好了,运行就不会报错了。

    拖进去很简单,都不用自己写路径的,是不是很爽

    好了,我们的环境配置就到此结束了。

    但是,现在有个重要的问题来了,我们怎么使用它

    2. Openssl 的使用

    (1). 来让我们引入4个 我精心剽窃了一晚上写的两个CRSA文件以及所依赖的Base64转码文件

    剽窃的多了,我都不知道剽窃了谁的,反正能达到目的就行了,但是还是经过了提炼的哦

    (2). 运行一下看,又报错了,又是文件找不到。这可难死宝宝了

    差点就哭了

    别着急,我们就像刚才那样 找到这个地方

    对,就是刚才那个地方的上面,点开后面

    然后我们把它拖进去

    哇擦,运行成功了

    好了,我们现在就能使用RSA加密了,我们先自己生成一个密钥对来做下试验,demo里面已经有生成好的。

    这就是使用方式了,想怎么搞怎么搞,通过write之后的key都已经保存在了本地

    这就是RSA的简单使用,要想了解更多,敬请期待下一期。呵呵,忘记贴结果了,我可不是忽悠人的

    记得使用Xcode6.4 + 打开哦,出错了我可不管。 这尼玛,这个图怎么不动了

    1. 提高篇 iOS RSA加密提升篇(分段加密)

    相关文章

      网友评论

      • 心至靜行至遠:百度SDK也用到OpenSSL这个第三方库,如果使用这个就会冲突
        心至靜行至遠:@Afer 删了直接调用的话就会报头文件找不到!
        Afer:@心至靜行至遠 那就把这个删了 直接调用就行了
      • 37ca5cd63091:您好 楼主 我想问下您的填充方式在那里修改
        为什么我用我们公司的公钥和私钥在你的demo上可以加解密 但是我在你的demo上加密 给后台解密就不行了 后台说可能填充方式和后台不一样 能告诉我这个是啥问题吗 谢谢拜托了
        Afer:@大雄_a5cf 我这个一般是通用的 如果安卓能解 那就你改吧 如果安卓不能解叫后台改吧。 代码里面有配套Java加密解密,可以参考
        37ca5cd63091:@Afer 谢谢 但是不知道为什么 你这边加密解密都可以 但是后台就是解密不了 楼主有好的建议吗 麻烦楼主了
        Afer:@大雄_a5cf CRSA里面的宏定义 关键字PADDING
      • fulen:你好,你们java后台是怎么做的,我们java解密出一串乱码
        Afer:@fulen 源码里面有Java代码
      • 阿磁:好辛苦啊,这么多人问还一一解答:+1:
        Afer:@阿磁 :joy:
      • 69526dfcc9b2:你好!我引入之后提示找不到openssl 然后看了路径 都是对的。 问题在哪儿呢
        69526dfcc9b2:我能加你qq吗。我q。 483838930
        69526dfcc9b2:@Afer 文件是黄色。
        Afer:@69526dfcc9b2 openssl文件夹确定在工程里面吗 文件夹颜色是啥
      • 3979259b9ce0:楼主,请教一下怎么保证公钥和私钥的安全性,如果是通过接口传的话可以被抓包到,如果是直接用文件导入到项目中,反编译以后也可以找到文件,急需帮助啊
        Afer:@2yscw 传输的时候加密 存本地的时候加密 一般是为了防止中途数据被篡改或被查看到 传输过来的时候加密 他获取不到密钥 每个设备对应不同密钥 他不拿到你的手机也不可能得到密钥 而且都拿到你的手机了 还用反编译你的APP么
      • 8d51de1002fb:请问公钥私钥是放在沙盒就行了嘛,还是放在其他地方。
        Afer:@纸飞机波音747 你可以加密再存 动态密钥
        8d51de1002fb:@Afer 我们要不要考虑将私钥放在更安全的地方?如果考虑应该放在哪里呢
        Afer:@纸飞机波音747 是在沙盒
      • 5dac400fd463:楼主 我的报错是这个 (_rsa != nil), function -[CRSA importRSAKeyWithType:] 请问知道原因吗?
        5dac400fd463:@Afer 010001-00993F4DE89C082AC819ABECB882ABE48C70700359EC37DE21B3C95BBD58DD2C11C6B2C1AE9DE1FFBE2AE838CD9295766DFE06FD1EF449D37D27DE37F9B765E17EAA4031E9867520BA5E3C4A4980922BF88FC0158F3B71D5257879B449EAB405DFA414CCC545E381B540C66FD879A24A7CB676A286DB1E81DD9555F820F6330609
        5dac400fd463:@Afer 动态获取的哦 我现在获取一个
        Afer:@vito0000 密钥发出来看看呢
      • 阿尔法代码狗:现在后台给我个xml里面是string,之后pem文件是我自己生成么
      • 阿尔法代码狗:pem文件是后台给的么
        Afer:@阿尔法代码狗 你问他原密钥怎么转回去哇
        阿尔法代码狗:@Afer 是我这端,把这个string生成pen文件啊
        Afer:@阿尔法代码狗 给string
      • 阿尔法代码狗:你的demo里面的私钥公钥还要重新弄,不能直接替换啊
        阿尔法代码狗:我替换了直接报错了 :smile:
        Afer:@阿尔法代码狗 可以直接替换的
        Afer:@阿尔法代码狗 ??
      • 阿尔法代码狗:楼主,我直接吧后台给的私钥公钥替换下,就报错,是什么原因呢
        785c52f271d5:@Afer 解决了
        Afer:@HGFCFFRD 错误是啥
        785c52f271d5:我也遇到这个问题了 求解
      • fdfbd575499a:你竟然这么早就开始研究了!
      • 这个汤圆没有馅:楼主你好,为什么我按照【 [cc writePrkWithKey:PriKey];
        NSString *str2 = [cc encryptByRsa:str withKeyType:(KeyTypePrivate)];
        NSLog(@"解密str is %@",str2); 】这样写就崩,崩的原因是【Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** NSAllocateMemoryPages(18446744073709551615) failed'
        】,可以麻烦您帮我看一下吗
        Afer:@汤了个圆 公钥 私钥是多少
        这个汤圆没有馅:@Afer 没复制错,就是按照您简书最后一张附图来写的,加密没问题的,但是解密就会崩,我复制的是终端给的信息
        Afer:@汤了个圆 错误复制错了吧
      • 5320d13c74f1:你这个中文真机加密会有乱码啊 模拟器没问题
        Afer:@Johansson :joy:你先自己找下原因
      • mf168:看到你加密方法的 加密速度真是给力 才10ms
        Afer:@QQDAOCOM :joy: 要不要打赏点啊
      • mf168:楼主 你这没有分段解密的方法?
        Afer:@QQDAOCOM NSString *encryptResult = encryptStr;

        NSMutableString *mutableResultStr = @"".mutableCopy;
        for (NSInteger i = 0; i < ceilf(encryptResult.length / 172); i ++) {
        NSString *subStr = [encryptResult substringWithRange:NSMakeRange(i * 172, 172)];
        NSLog(@"解密第%ld段 === %@ length = %ld", i, subStr, subStr.length);
        [mutableResultStr appendString:[cc decryptByRsa:subStr withKeyType:(KeyTypePrivate)]];
        }
        Afer:@QQDAOCOM 我下班了
        Afer:@QQDAOCOM :smile:自己写啊 很简单的
      • 85481b5570a0:有汉字的话 加密后 就无法解密了
        Afer:@Hen温暖先生 utf8
        85481b5570a0:@Afer Unicode转码 也不行
        Afer:@Hen温暖先生 先把汉字转码 再加密
      • 85481b5570a0:我们接口里面拼接有汉字 例如“area=全国”, 加密后 解密 变成了:“area=hý”, 求救援!!!SOS
      • 冰之与火焰:好的,我先研究研究,可能还需要向您请教哦。。
        冰之与火焰:@Afer 还有,我想知道每台手机用不同的公钥密钥,这么做有没有必要,还是直接所有的客户端用同一套公钥密钥就可以了?
        冰之与火焰:@Afer 研究了一上午,网上好像都是通过mac终端来获取公钥密钥的。没找到代码里生成公钥秘钥的方法,您赐教一下?
        Afer:@18758587125 好
      • 冰之与火焰:hello,我用mac下的openssl生成的公钥私钥,但是现在需求是要在每台手机上公钥私钥都不相同,可以在代码中动态生成公钥私钥吗,改怎么做?
        Afer:@18758587125 可以生成哦 建议你先在网上找找
      • 1e9bc41934d4:而且我也没有私钥 只有公钥怎么加密
        Afer:@NickYangBooy 源码里面有哦
        ParsonsYang:想问一下如何读取私钥文件啊
        Afer:@Viterbi 报什么错
      • 1e9bc41934d4:楼主,用你这个demo老是报错,即便换行也不行。
      • 半尺尘:博主你好,我试了你Demo中提供的方法。我们是需要用服务器给的公钥去加密密码,把加密数据传给服务器。有点疑惑的是,每次服务器返回的公钥都是固定的,但是通过CRSA类生成的加密数据每次都不一样,理论上是这样的吗?还是我哪里弄错了呢? :blush:
        f806bf071fb3:@Afer 这个加密 汉字的不行啊 。。。
        Afer:@半尺尘 加密结果每次不一样 能解密就代表成功了
        半尺尘:@半尺尘 Xcode7.3.1,用的模拟器
      • b4f8065dab09:楼主,我想问一下,我们后台是基于java做的,后台只是给了我一个公钥,我怎么和他交互啊?RSA 生成不是成对的公钥和私钥吗?不是只有对应的私钥才能解开公钥吗?
        Afer:@侯先生的故事 给你公钥 你就使用公钥加密 然后将加密的数据传给后台,他用私钥解密就OK了
      • MacPen:请问这个加密方法是与java后台的交互吗?
        MacPen:@Afer 嗯嗯,谢谢,我们的后台是java,已经试过是可用的,只是后台返的私钥格式需要改一下
        Afer:@MacPen 这个与后台是哪种无关,都可以交互的。只要加密方式一样,都可以的。
      • 大牛在郑州:作者很牛逼:crocodile:
      • Sanchain:问题解决了,可以解密了。是服务器给的公、私钥有问题....弱弱问一下,现在服务器是用C写的,如果是Java或是PHP服务器, 用CRSA这个类加解密是不是一样没有问题呢?
        Sanchain:@Afer 好的。谢谢 :clap:
        Afer:@Sanchain 我看了下你的公钥 长度和我的不一样,应该需要做特殊处理。RSA参数是可以配置的,我写的例子是一般用到的加密解密。
      • Sanchain:贴上公钥:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtIQjtcZdAbzzYK1b4ZHD
        XgfB7rkxFjjm9XJHCxNvjUjajIrP0noaLiMaNJjBH2ku+TmNoYip9AKcY1x+5+M/
        mAdzW2o65xjt683fKK37ALez2uX1ZjuabRqJHc/SkMXG/B4X2jAzDBmEWEFOwmCp
        BUhtIMNIV6JxhErkR3lOqw0/qaVQPu5nGDw7M0QJ0yK6TytK80M19cxFKB3cY0Fj
        AclTaFoeyorX4E1+8KVYZMnilD536rhZL/DV+OUsyTdXFHlh6yRjIlanky89D7aB
        ksWtpGHr/LUIreSLthcoeT/007PlFX0e9glFf9hmPibgcm3iZ20Vg0P4nrN/Vl96
        SwIDAQAB 楼主可以帮忙试一下吗
        Afer:可以看下我demo里面的两个key的例子 后面有\n
        Sanchain:@Afer 是的是的,我刚才又看了一遍你的demo, 确实是我没有换行。现在可以加密成功了,但是我用服务器给的私钥(NSString)来解密,报错了,这次私钥我是换行了,不知道是不是私钥的问题?但是我换上你demo的私钥试了一下,虽然没有解密成功,但至少没有报错....纳闷了 :joy:
        Afer:@Sanchain 恩 有空帮你试试 目测是每换行的原因,这个问题我再优化一下
      • Sanchain:我按照步骤试了一下,使用我司服务器的公钥进行加密,报错了,服务器是C写的,基于OPENSSL RSA算法, 报错是在CRSA.m, line 56,function -[CRSA importRSAKeyWithType:]这个方法的56行,不知道是什么原因,请指教
      • Sanchain:谢谢分享

      本文标题:iOS RSA加密基础篇

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