PHP、Android、iOS接口RSA加密解密

PHP、Android、iOS接口RSA加密解密,第1张

概述项目需要对敏感接口进行加密解密, *** 作如下,记录一下方便以后查找。 一、PHP,Android,iOS需要密钥格式PHP私钥需要PKCS1格式Android私钥需要PKCS8格式iOS私钥需要.p12的文件格式,公钥需要.der格式 二、Win10安装使用OpenSSLhttp://slproweb.com/products/Win32OpenSSL.html

项目需要对敏感接口进行加密解密, *** 作如下,记录一下方便以后查找。

 

一、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公钥和私钥

生成私钥文件

genrsa -out rsa_private_key.pem 2048# openssl:是一个自由的软件组织,专注做加密和解密的框架。# genrsa:指定了生成了算法使用RSA# -out:后面的参数表示生成的私钥key的文件名字# 2048:表示的是生成key的长度,单位字节(bits)# 此命令后会生成一个名字为rsa_private_key.pem、2048位、PKCS1格式的RSA私钥

生成公钥文件

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格式

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、 创建证书请求

req -new -key rsa_private_key.pem -out rsacert.csr

拿着RSA私钥文件去数字证书颁发机构(即CA)申请一个数字证书。CA会给你一个新的文件cacert.pem,那才是你的数字证书。

输入命令后会提示让输入国家、省份、地区、邮箱等信息,按要求填写或者不填都可以,最终会生成rsacert.csr 文件

2、生成证书并签名,设置有效期10年

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格式 (公钥)

x509 -outform der -in rsacert.crt -out public_key.der

在iOS开发中,公钥是不能使用base64编码的,上面的命令是将公钥的base64编码字符串转换成二进制数据

此时生成的public_key.der就是iOS所需的RSA公钥

4、 导出 P12 文件

pkcs12 -export -out private_key.p12 -inkey rsa_private_key.pem -in rsacert.crt

在iOS使用私钥不能直接使用,需要导出一个p12文件。此命令就是将私钥文件导出为p12文件

此时会提示让输入密码,可输入iOS私钥文件的密码,但是请注意:在项目中读取私钥文件时需要此时设置的密码。并且此密码是生成的p12私钥文件的密码,并不是rsa_private_key.pem原始私钥文件的密码

 

四、PHP相关代码

<?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

总结

以上是内存溢出为你收集整理的PHP、Android、iOS接口RSA加密解密全部内容,希望文章能够帮你解决PHP、Android、iOS接口RSA加密解密所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1017414.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存