当PHP服务器与客户机交互并提供开放API时,敏感部件API数据传输通常需要数据加密。RSA非对称加密可以在这个时候使用。下面是一个示例,说明如何使用PHP实现数据加密和解密。

1。加密和解密的第一步是生成公钥和私钥对,私钥的加密内容可以由公钥(依次)解密。

下载开源RSA密钥生成工具OpenSSL(通常Linux系统有自己的程序),解压缩到单独的文件夹,输入bin目录,执行以下命令:




OpenSSL的key //生成了rsa_private_key.pem 1024
OpenSSL pkcs8 - topk8通知PEM在rsa_private_key.pem - outform PEM nocrypt出private_key.pem
OpenSSL的RSA在rsa_private_key.pem - pubout出rsa_public_key.pem




第一个命令生成原始的RSA私钥文件rsa_private_key.pem,第二命令将原来的RSA私钥pkcs8格式,和第三生成RSA公钥rsa_public_key.pem。

从上面,我们可以看到相应的公共密钥可以生成的私钥,所以我们用私钥private_key.pem在服务器端和Android和iOS前端的公钥。

2,PHP通过生成的公钥和私钥进行加密和解密,直接在代码上进行加密。


< PHP
private_key美元=-----开始RSA私钥-----
miicxqibaakbgqc3 / / sr2txw0wrc2dysx8vnglqt3y7ldu9 + lbli6e1ks5lfc5jl
tgf7kbtskchbm3ouehwqp1zj85ije59af5gib2klbd6h4wrbbha2xe1sq21ykja /
gqx7 / / iria3zqfxgv qekyx + xalvoolzqdwh76o2n1vp1d + td3amhsk7qidaqab
aogbakh14bmitesqd4pywodwmy7rrrvyfpenjjtecljvkb7ikrvxvdkp1xijngkh
2h5syhq5qslpsgyj1m / xkdnginwalvhvd3bokkgkg1bzn7ao5pxt + herqxavwws6
ga63yvsic8jcodxiuvxjnumqrlaqof6aub / 2vwc2t5mdmxlhakea3pwgpvxgliwl
3h7qlyzlrlrbfrurn4cyl4uyaakokkavzly04glle8ycc2dzl4eil4l / / Gao X
德苴 / / otv1a3sqcce1f + chlrqjbanozy0meovkwhu4bscsdnfm6usqowybewhyyh
qbaclcqenihajccdmgyj53lfigyv0wcs54kcqaxapkahclrkqladquv5iwyyj25f
组织智商+ y8sgccs73qixru1ypjy9yka / meg9smsl4oh9ioigi + zuygh9ydsmeq0cqqc2
4g3ip2g3lndrdzim5nz7pfnmyrabxk / ugvuwdk47iwtzhfkdhxkfc8qepuhbsahl
qjifgxy4ejkubm3fpdgjakafwuxyssijjvrhwnhfbg0rfkvvy63osmnrxil4x6ey
yi9lblcsyfpl25l7l5zmjrahn45zaioobrwqpm5edu7c
结束RSA私钥;

public_key美元=-----开始公开密钥-----
migfma0gcsqgsib3dqebaquaa4gnadcbiqkbgqc3 / / sr2txw0wrc2dysx8vnglqt
3y7ldu9 + lbli6e1ks5lfc5jltgf7kbtskchbm3ouehwqp1zj85ije59af5gib2kl
bd6h4wrbbha2xe1sq21ykja / / / gqx7 iria3zqfxgv qekyx + xalvoolzqdwh76o
2n1vp1d + td3amhsk7qidaqab
结束公钥;

/ /回声private_key美元;
pi_key = openssl_pkey_get_private美元(美元private_key); / /这个函数可用于确定是否私有密钥,身份资源ID返回可用的资源
pu_key = openssl_pkey_get_public美元(美元public_key); / /这个函数可以用来判断公钥是可用的。
print_r($ pi_key);回声;
print_r($ pu_key);回声;


$data =aassssasssddd ; / /原始数据
=加密的$ ;
= $解密;

源数据:

私钥加密:;

openssl_private_encrypt(美元美元美元数据加密,pi_key); / /私有密钥加密
美元($加密)加密= base64_encode; / /加密的内容通常包含特殊字符编码转换,通过在网络中传输的URL应该注意是否Base64编码是URL的安全
回声$加密,;

公钥解密:;

openssl_public_decrypt(base64_decode(加密,解密美元)美元,美元pu_key); / /私有密钥加密的内容可以通过公钥解密
回声$解密,;

回声--------------------------------------- ;
公钥加密:;

openssl_public_encrypt(美元美元美元数据加密,pu_key); / /公共密钥加密
美元($加密)加密= base64_encode;
回声$加密,;

私钥解密:;
openssl_private_decrypt(base64_decode(加密,解密美元)美元,美元pi_key); / /私有密钥
回声$解密,;