php rsa加密解密实例

原创 2014年03月01日 17:17:02

php服务端与客户端交互、提供开放api时,通常需要对敏感的部分api数据传输进行数据加密,这时候rsa非对称加密就能派上用处了,下面通过一个例子来说明如何用php来实现数据的加密解密


1、加密解密的第一步是生成公钥、私钥对,私钥加密的内容能通过公钥解密(反过来亦可以)

下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令:

openssl genrsa -out rsa_private_key.pem 1024
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
openssl rsa -in rsa_private_key.pem -pubout -out 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 = '-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC3//sR2tXw0wrC2DySx8vNGlqt3Y7ldU9+LBLI6e1KS5lfc5jl
TGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2klBd6h4wrbbHA2XE1sq21ykja/
Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o2n1vP1D+tD3amHsK7QIDAQAB
AoGBAKH14bMitESqD4PYwODWmy7rrrvyFPEnJJTECLjvKB7IkrVxVDkp1XiJnGKH
2h5syHQ5qslPSGYJ1M/XkDnGINwaLVHVD3BoKKgKg1bZn7ao5pXT+herqxaVwWs6
ga63yVSIC8jcODxiuvxJnUMQRLaqoF6aUb/2VWc2T5MDmxLhAkEA3pwGpvXgLiWL
3h7QLYZLrLrbFRuRN4CYl4UYaAKokkAvZly04Glle8ycgOc2DzL4eiL4l/+x/gaq
deJU/cHLRQJBANOZY0mEoVkwhU4bScSdnfM6usQowYBEwHYYh/OTv1a3SqcCE1f+
qbAclCqeNiHajCcDmgYJ53LfIgyv0wCS54kCQAXaPkaHclRkQlAdqUV5IWYyJ25f
oiq+Y8SgCCs73qixrU1YpJy9yKA/meG9smsl4Oh9IOIGI+zUygh9YdSmEq0CQQC2
4G3IP2G3lNDRdZIm5NZ7PfnmyRabxk/UgVUWdk47IwTZHFkdhxKfC8QepUhBsAHL
QjifGXY4eJKUBm3FpDGJAkAFwUxYssiJjvrHwnHFbg0rFkvvY63OSmnRxiL4X6EY
yI9lblCsyfpl25l7l5zmJrAHn45zAiOoBrWqpM5edu7c
-----END RSA PRIVATE KEY-----';

$public_key = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3//sR2tXw0wrC2DySx8vNGlqt
3Y7ldU9+LBLI6e1KS5lfc5jlTGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2kl
Bd6h4wrbbHA2XE1sq21ykja/Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o
2n1vP1D+tD3amHsK7QIDAQAB
-----END PUBLIC KEY-----';

//echo $private_key;
$pi_key =  openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
$pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的
print_r($pi_key);echo "\n";
print_r($pu_key);echo "\n";


$data = "aassssasssddd";//原始数据
$encrypted = ""; 
$decrypted = ""; 

echo "source data:",$data,"\n";

echo "private key encrypt:\n";

openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密
$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
echo $encrypted,"\n";

echo "public key decrypt:\n";

openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来
echo $decrypted,"\n";

echo "---------------------------------------\n";
echo "public key encrypt:\n";

openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密
$encrypted = base64_encode($encrypted);
echo $encrypted,"\n";

echo "private key decrypt:\n";
openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密
echo $decrypted,"\n";


PHP OPENSSL 函数手册翻译备查 -- openssl_pkey_get_private

openssl_pkey_get_private (PHP 4 >= 4.2.0, PHP 5) openssl_pkey_get_private — 获得私钥 说明 resource op...
  • u012588643
  • u012588643
  • 2015-05-13 14:21:33
  • 3299

关于php的openssl 加密解密以及数字签名

好久没写csdn博客了,今天把这个记录下来,以备后用,同时欢迎广大同行一起探讨相关话题。         首先,下面的代码是参考网上一位朋友的,然后,部分逻辑是我参考银联支付安全策略加进去的。本文件...
  • L_yangliu
  • L_yangliu
  • 2016-07-26 15:45:18
  • 2684

PHP OPENSSL 函数手册翻译备查 -- openssl_pkey_get_public

openssl_pkey_get_public (PHP 4 >= 4.2.0, PHP 5) openssl_pkey_get_public — 从证书中提取公钥,已备其他函数使用 说明 ...
  • u012588643
  • u012588643
  • 2015-05-13 14:37:46
  • 1784

RSA算法类(PHP)

通过openssl实现的签名、验签、非对称加解密,需要配合x.509证书(如crt和pem)文件使用。 由于各种原因,该类并不十分完善,欢迎各种测试! ...
  • linvo
  • linvo
  • 2013-01-25 17:55:23
  • 14270

php的RSA加密解密算法

最近因为工作的需要,要倒腾支付宝支付相关的知识,因为支付宝应用了RSA加密机制,个人对此并不了解,所以在这里写下一篇总结。 1、生成公钥和私钥 要应用RSA算法,必须先生成公钥和私钥,公钥和私...
  • u011250882
  • u011250882
  • 2015-10-07 12:54:56
  • 3035

PHP开发接口使用RSA进行加密解密方法

网络安全问题很重要,尤其是保证数据安全,遇到很多在写接口的程序员直接都是明文数据传输,在我看来这是很不专业的。本人提倡经过接口的数据都要进行加密解密之后进行使用。         这篇文章主要介绍使...
  • Zhihua_W
  • Zhihua_W
  • 2017-06-30 15:51:47
  • 6385

PHP通过OpenSSL生成证书、密钥并且加密解密数据

#生成证书密钥
  • small_rice_
  • small_rice_
  • 2015-04-16 14:34:06
  • 20353

php 生成加密公钥加密私钥

1.生成公钥私钥 win下必须要openssl.cof支持 liunx一般已自带安装$config = array( //"digest_alg" => "sha512", ...
  • mengke1124
  • mengke1124
  • 2016-08-26 10:57:51
  • 5930

PHP实现公钥加密机制

前言昨天看了下支付宝的公钥加密机制,然后看了两篇这方便的文章,感觉受益匪浅。参考了以下文章:支付宝公钥加密机制文档数字签名是什么?OpenSSL小结正文加密的意义在于数据的传输过程中,即使被第三方获取...
  • koastal
  • koastal
  • 2016-06-03 12:35:16
  • 4386

RSA之php私钥签名与android、ios公钥加密

RSA算法是一种非对称算法,算法需要一对密钥,使用其中一个加密,需要使用另外一个才能解密。我们在进行RSA加密通讯时,就把公钥放在客户端,私钥留在服务器。由于ios公钥解密需要第三方库并且很耗性能,所...
  • u010593689
  • u010593689
  • 2016-07-12 17:02:58
  • 2000
收藏助手
不良信息举报
您举报文章:php rsa加密解密实例
举报原因:
原因补充:

(最多只允许输入30个字)