ios下使用rsa算法与php进行加解密通讯
2015-12-31 11:52
585 查看
首先了解一下几个相关概念,以方便后面遇到的问题的解决:
RSA算法:1977年由Ron Rivest、Adi Shamirh和LenAdleman发明的,RSA就是取自他们三个人的名字。算法基于一个数论:将两个大素数相乘非常容易,但要对这个乘积的结果进行因式分解却非常困难,因此可以把乘积公开作为公钥。该算法能够抵抗目前已知的所有密码攻击。RSA算法是一种非对称算法,算法需要一对密钥,使用其中一个加密,需要使用另外一个才能解密。我们在进行RSA加密通讯时,就把公钥放在客户端,私钥留在服务器。DER, PEM:既然使用RSA需要一对密钥,那么我们当然是要先使用工具来生成这样一对密钥了。在linux、unix下,最简单方便的就是使用openssl命令行了。而DER、PEM就是生成的密钥可选择的两种文件格式。DER是Distinguished Encoding Rules的简称,是一种信息传输语法规则,在ITU
X.690中定义的。在ios端,我们的公钥就是需要这样一种格式的,我们可以从Certificate,
Key, and Trust Services Reference这篇文档的SecCertificateCreateWithData函数的data参数的说明中看到。而PEM格式是一种对DER进行封装的格式,他只是把der的内容进行了base64编码并加上了头尾说明。openssl命令行默认输出的都是PEM格式的文件,要能够在ios下使用,我们需要指定使用DER或者先生成PEM然后转换称DER。
使用openssl命令行生成密钥对
服务器端PHP的加解密函数
闲话不多说,贴一段代码,肯定能看懂的了
IOS客户端的加解密
首先我们需要导入Security.framework,在ios中,我们主要关注四个函数SecKeyEncrypt:使用公钥对数据进行加密
SecKeyDecrypt:使用私钥对数据进行解密
SecKeyRawVerify:使用公钥对数字签名和数据进行验证,以确认该数据的来源合法性。什么是数字签名,可以参考百度百科这篇文章?
SecKeyRawSign:使用私钥对数据进行摘要并生成数字签名
从这几个函数中,我们可以看到,我们使用公钥能做的事情就有两个:加密数据,以及对服务器端发来的数据进行签名认证,但是如果你想跟我之前想的一样,要使用公钥来对数据进行解密,那就没有自带API了。如果想在服务器端使用私钥加密数据,然后再在客户端使用公钥进行解密,以图这样来对交互数据进行加密,看来是行不通的。其实也应该是这样,公钥是公开的,因为他可以编译到二进制文本里面就认为他不能被获取其实是不对的。同时,RSA因为都是做大数的运算,算法性能上比较差,如果做大数据量的加解密,对IOS来讲,肯定也是不合适的。
这里就把使用公钥进行加密的代码贴出来:
原文链接:https://blog.yorkgu.me/2011/10/27/rsa-in-ios-using-publick-key-generated-by-openssl/?plg_nld=1&plg_uin=1&plg_auth=1&plg_nld=1&plg_usr=1&plg_vkey=1&plg_dev=1
相关文章推荐
- 字节流格式(Annex B)和RTP格式流浅析
- PHP 7.0 安装使用与性能监测!
- PHP 7.0 安装使用与性能监测!
- 这九年来都在干嘛-兄弟连IT教育
- 使用itextpdf提取pdf内容
- PECL 和 PEAR 的区别
- PHP - Cookie
- tftp命令说明
- php读取html文件(或php文件)的方法
- php读取html文件(或php文件)的方法
- 他山之石-php编译中遇到error解决办法!
- php大form用post方式传递数据过多被截取的问题
- phpStorm配置svn提示:Can't use Subversion command line client
- php创建桌面快捷方式实现方法
- windows下的ftp
- 干货!!!Yii 1.1操作Cookie
- PHP导入与导出Xml格式的Excel
- BroadcastPractice的单元测试
- 远程删除FTP端文件
- Yii操作cookie