公司最近新做了一个项目,要求RSA非对称加密。
然后我就找了找之前的轮子,HBRSAHandler ,不知道大伙用没用过。核心就是用这个。
很简单的两个方法,加密,解密。
//加密
- (NSString*) encryptWithPublicKey:(NSString*)content;
// 解密
- (NSString*) decryptWithPrivatecKey:(NSString*)content;
然而,在我集成了 高德地图,然后又集成了百度的图像识别之后,居然报错,意思是高德地图里面的某个静态库文件和RSA里的openssl 里面的lib静态库重复冲突。
这个气哦~
遇到这种事情怎么办!!!
改呗,
然后我又准备把两个静态库合成一个静态库,但是,合成到一半进行不下去了,具体原因我也不太清楚,准备后续有时间细细研究一下,无奈时间不等人,准备Plan B。
准备第二个办法,换库~
因为高德地图是统一好的,而且感觉RSA的库手动导入而且没有什么技术含量,而且库小巧方便,那就换RSA 的库吧。
然后,说时迟那时快,只听叮咚一想,RSA的三方就下载下来了。这个库就叫RSA,我下载了一个RSADemo的文件,这个要感谢群里大大们的帮助。qq:1120508748(该账号不存在),是这个小哥哥告诉我的。
我试了试 Demo 果然好用,然后把库放到了我的项目里,whaaaaaaaaaaaaaaaat!解不出来~
然后,还有一个小哥哥告诉我RSAEncryptor这个库也是好用的,我就又叮咚一声,下了一个Demo。
这个在Demo里也是好用的,但是放到项目里就是解不出来,两个三方的方法名都是一样的。
[RSAEncryptor encryptString:request_info publicKey:publicKey];
[RSA encryptString:request_info publicKey:publicKey];
都很方便,前面是加密的内容,后面是加密的公钥。
这两个库只有公钥加密,私钥解密,没有用公钥解密的方法,据说是因为 iOS 端没法用公钥去解密私钥加密后的数据。这个具体我没试,不能确定真假。等有时间试过之后再更新。
然后新生成了一对公钥私钥。
就长这个样的两个文件。
RSA 非对称加密是什么意思呢?
非对称加密的核心意思就是,可以很容易的算出来两个大的质数的乘积,但是想分解一个合数的两个质数很不容易。RSA 的两个秘钥就相当于一个合数的两个质数。
RSA 又叫非对称加密,非对称指的是加密的秘钥和解密的秘钥不同,没办法用解密的秘钥推导出加密的秘钥,也没办法用加密的秘钥推导出解密的秘钥,从而确保信息的安全性,增大了破解难度。
简单的说就是,通信两端分别用公钥或者私钥加密,而另一端则用另一把秘钥进行解密。而秘钥的位数决定了解密的复杂度,512,1024,2048等,现在1024位以上的就很安全。
这么解释是不是就很清晰啦~
接下来说用法,公钥加密和私钥加密的区别是什么呢?
公钥加密和私钥加密的用途不一样
公钥加密:为了保证数据的“机密性”
私钥加密:为了保证数据的“可靠性”、“完整性”和“操作不可否认性”
这么一来,可以想一下,ios客户端的沙盒机制,基本上就保证了客户端传输数据的“可靠性”、“完整性”和“操作不可否认性”,所有ios的私钥加密基本很少见。
而且,客户端是采集客户的信息,更多的是需要保证数据的“机密性”。