iOS RSA加密提升篇(分段加密)

作者: Afer | 来源:发表于2016-04-12 10:48 被阅读2819次

    昨天有人问我加密字符串长度超过117位就会崩溃,该怎么搞,说实话我当时都懵逼了。

    • 这篇博文有比较好的解释@Defonds

    生成密文的长度和明文长度无关,但明文长度不能超过密钥长度

    • 不管明文长度是多少,RSA 生成的密文长度总是固定的。但是明文长度不能超过密钥长度。比如 Java 默认的 RSA 加密实现不允许明文长度超过密钥长度减去 11(单位是字节,也就是 byte)。也就是说,如果我们定义的密钥(我们可以通过 java.security.KeyPairGenerator.initialize(int keysize) 来定义密钥长度)长度为 1024(单位是位,也就是 bit),生成的密钥长度就是 1024位 / 8位/字节 = 128字节,那么我们需要加密的明文长度不能超过 128字节 -11 字节 = 117字节。也就是说,我们最大能将 117 字节长度的明文进行加密,否则会出问题(抛诸如 javax.crypto.IllegalBlockSizeException: Data must not be longer than 53 bytes 的异常)。

    • 同样的道理iOS加密也会有这个问题。

    一个比较好的解决办法就是将明文分段加密

    --------------------->这是Demo链接<---------------------

    相关文章

      网友评论

      • Mister志伟:请问,为什么同样的明文加密出来都是一样的,需要设置什么才能加密后的结果不一样。
      • 5045a40d0a0c:楼主现在的demo是崩溃的 能回复下嘛
        Afer:@走马zm 崩溃原因是啥
      • GC风暴:非常好
        Afer:@GC风暴 谢谢
      • a93577e11e05:作者你好!我在加密时候,字符转出来直接为nil,问题出在private_key.pem为nil,请问这个是少了哪个步骤吗?
        Afer:@dippa 密钥是多少
      • Heap:楼主, 我是把整个字典 转成 json二进制,然后再把json二进制转换成 json字符串, 在对json字符串进行分段加密的时候 如果这个字典里面有汉字 就会出现乱码的问题, 求解!
        Afer:@张林鹏 加密之后发给后端么
        Heap:@Afer 后端说在分段的时候要加一个"|",所以我在加密完之后有这么一个操作 [encryptStr appendString:[NSString stringWithFormat:@"%@|",ss]]; 然后我测试的时候 先用 "|"分割,然后分开解密,这个时候汉字那部分就已经出现乱码了,应该是这里的问题,我该如何解决?
        Afer:@张林鹏 看demo 里面有
      • fdfbd575499a:当楼主帮我解决了分段加密解密的难题时,说真的,我的内心是崩溃的,我情绪是失控的,即便我是一个男人,即便我羞于开口,可我还是要说:你特么这么厉害,除了我,你爹妈造吗!
      • fdfbd575499a:太感谢楼主了,我们正在做分段加密,楼主的文章如获至宝!
        fdfbd575499a:@Afer 大神,你QQ和微信是多少啊?RSA这个问题目前已经纠结到死的程度啊……
        Afer:@xuya987 :joy: 有bug可以提出来。继续优化
      • Sense王旭明:117字节算是硬性限制吗?我看了demo 为什么解密要用172字节分段解密? 不应该也是117字节吗?
        Afer:@简了个简 加密之后长度变了
        Sense王旭明:@Afer 为什么解密要用172字节分段解密额?不应该是117字节码?
        Afer:@简了个简 这个是openssl库限制的
      • 谢微一直都得踢足球:请问一下 我ios端加密了 java后台解密出来是乱码 但是后台加了new BouncyCastleProvider()这个 就能解密了 但是安卓就不能解密了 这是怎么回事
        Afer:@谢微一直都得踢足球 密钥格式不一样吧
      • 快乐的tomato:你遇到过这种情况吗?
        Afer:@快乐的tomato 密钥类型不对吧
      • 快乐的tomato:楼主,我的打印结果是:
        2016-05-01 15:33:50.919 Rsa加密[8803:406347] 加密前:这是一段将要使用'.der'文件加密的字符串!
        2016-05-01 15:33:50.919 Rsa加密[8803:406347] 加密后:(null)
        2016-05-01 15:33:50.919 Rsa加密[8803:406347] 解密后:(null)

        为什么是空的,按照你的方法一步一步来的,你知道为什么吗?
      • lumic000:在117时如果遇到汉字,汉字的两个字符被分开截取,导致数据有误,产生参数错误,有没有遇到,我这是用100截取的,后面偶现当汉字时可能出现这个问题
        Afer:@Migi000 我测试是1位 如果你的不对 你可以用补位来做
        lumic000:不是啊,用utf-8提前处理下
        Afer:@Migi000 字符串的汉字和英文是1位吧 。怎么会分开

      本文标题:iOS RSA加密提升篇(分段加密)

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