PHP、Android、iOS接口RSA加密解密
项目需要对敏感接口进行加密解密,操作如下,记录一下方便以后查找。
一、PHP,Android,iOS需要密钥格式
PHP 私钥需要PKCS1格式
Android 私钥需要PKCS8格式
iOS 私钥需要.p12的文件格式,公钥需要.der格式
二、Win10安装使用OpenSSL
http://slproweb.com/products/Win32OpenSSL.html
安装好对应的版本,并加入到环境变量中
http://slproweb.com/download/Win64OpenSSL-1_1_1k.exe
进入到对应文件,执行进入终端
D:\Program Files\OpenSSL-Win64\bin\openssl.exe
三、使用OpenSSL生成RSA公钥和私钥
生成私钥文件
1 2 3 4 5 6 7 8 | genrsa -out rsa_private_key.pem 2048 # openssl:是一个自由的软件组织,专注做加密和解密的框架。 # genrsa:指定了生成了算法使用RSA # -out:后面的参数表示生成的私钥key的文件名字 # 2048:表示的是生成key的长度,单位字节(bits) # 此命令后会生成一个名字为rsa_private_key.pem、2048位、PKCS1格式的RSA私钥 |
生成公钥文件
1 | rsa - in rsa_private_key.pem -pubout -out rsa_public_key.pem |
此命令会从私钥中提取出来生成一个名字为 rsa_public_key.pem 的RSA公钥
PHP
所需公钥、私钥已经生成,即rsa_public_key.pem、rsa_private_key.pem
Android
需要把私钥的格式从默认的PKCS1转换为PKCS8格式
1 | pkcs8 -topk8 -inform PEM - in rsa_private_key.pem -outform PEM -nocrypt -out pkcs8_private_key.pem |
此命令会会生成名字为pkcs8_private_key.pem的RSA私钥文件
Android所需公钥、私钥已经生成,即rsa_public_key.pem、pkcs8_private_key.pem
iOS
由rsa_private_key.pem生成csr -> 生成crt -> 生成der -> 生成p12
1、 创建证书请求
1 | req -new -key rsa_private_key.pem -out rsacert.csr |
拿着RSA私钥文件去数字证书颁发机构(即CA)申请一个数字证书。CA会给你一个新的文件cacert.pem,那才是你的数字证书。
输入命令后会提示让输入国家、省份、地区、邮箱等信息,按要求填写或者不填都可以,最终会生成rsacert.csr 文件
2、生成证书并签名,设置有效期10年
1 | x509 -req -days 3650 - in rsacert.csr -signkey rsa_private_key.pem -out rsacert.crt |
509是一种非常通用的证书格式
将用上面生成的密钥rsa_private_key.pem和rsacert.csr证书请求文件生成一个数字证书rsacert.crt,这个就是公钥
3、转换格式:将pem格式文件转换成der格式 (公钥)
1 | x509 -outform der - in rsacert.crt -out public_key.der |
在iOS开发中,公钥是不能使用base64编码的,上面的命令是将公钥的base64编码字符串转换成二进制数据
此时生成的public_key.der就是iOS所需的RSA公钥
4、 导出 P12 文件
1 | pkcs12 - export -out private_key.p12 -inkey rsa_private_key.pem - in rsacert.crt |
在iOS使用私钥不能直接使用,需要导出一个p12文件。此命令就是将私钥文件导出为p12文件
此时会提示让输入密码,可输入iOS私钥文件的密码,但是请注意:在项目中读取私钥文件时需要此时设置的密码。并且此密码是生成的p12私钥文件的密码,并不是rsa_private_key.pem原始私钥文件的密码
四、PHP相关代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | <?php /** * PHP、Android、iOS 非对称加解密。 */ final class CryptRSA { /** * 获取私钥 */ private function getPrivateKey() { return '' ; } /** * 获取公钥 */ private function getPublicKey() { return '' ; } /** * 私钥加密 */ public function privateEncrypt($data = '' ) { if (!is_string($data)) { return null; } return openssl_private_encrypt($data, $encrypted, $this->getPrivateKey()) ? base64_encode($encrypted) : null; } /** * 私钥解密 */ public function privateDecrypt($encrypted = '' ) { if (!is_string($encrypted)) { return null; } return (openssl_private_decrypt(base64_decode($encrypted), $decrypted, $this->getPrivateKey())) ? $decrypted : null; } /** * 公钥加密 */ public function publicEncrypt($data = '' ) { if (!is_string($data)) { return null; } return openssl_public_encrypt($data, $encrypted, $this->getPublicKey()) ? base64_encode($encrypted) : null; } /** * 公钥解密 */ public function publicDecrypt($encrypted = '' ) { if (!is_string($encrypted)) { return null; } return (openssl_public_decrypt(base64_decode($encrypted), $decrypted, $this->getPublicKey())) ? $decrypted : null; } } // $obj = new CryptRSA(); // $res = $obj->privateEncrypt($_GET[ 'data' ]); // 加密数据 //echo $res; //echo '<hr>' ; //echo $obj->publicDecrypt($res); // 解密 //exit ; |
五、Android与iOS查看其它文章
下面的网址可以进行验证与调试
http://web.chacuo.net/netrsakeypair
参考方法:
Windows安装使用Openssl
https://blog.csdn.net/zha6476003/article/details/80900988
使用OpenSSL生成RSA公钥和私钥
https://blog.csdn.net/qq_38234594/article/details/79494289
RSA公钥、私钥的生成详解,包含Java、PHP、Android、iOS端
https://www.jianshu.com/p/b8d8d4fea0aa
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2020-04-23 Android监听系统截屏的坑
2019-04-23 MBProgressHUD自定义视图大小的修改
2019-04-23 多行文本溢出解决方案总结