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中用生成的公钥、私钥进行加密解密,直接上代码
-
$private_key = file_get_contents("private_key.pem");
-
$public_key = file_get_contents("public_key.pem");
-
$pi_key = openssl_pkey_get_private($private_key);
-
$pu_key = openssl_pkey_get_public($public_key);
-
$data = 'aassssasssd3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333dd';//原始数据
-
$encrypted = "";
-
$decrypted = "";
-
openssl_private_encrypt($data,$encrypted,$pi_key); //私钥加密
-
$encrypted = base64_encode($encrypted);
-
echo "加密后内容{$encrypted}";
-
openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);
-
echo "解密后的内容".$decrypted
sha256withrsa签名
-
//create signature
-
$src = "asdfsadfdd3333";
-
openssl_sign($src, $signature, $private_key, OPENSSL_ALGO_SHA256);
-
echo "原始数据{$src}";
-
echo $signature;
-
$r = openssl_verify($src, $signature, $public_key, "sha256WithRSAEncryption");
-
var_dump($r)
阅读(1691) | 评论(0) | 转发(0) |