PHP openSSL应用

本文介绍如何在CentOS环境中生成RSA密钥对,并利用PHP实现数据的签名及验证过程。具体步骤包括安装OpenSSL、生成公钥与私钥、编写PHP函数完成签名与验证等。

首先在centos上生成公钥和私钥

确保openssl已安装

#yum install openssl
#yum install openssl-devel
#openssl   ##进入OpenSSL程序
OpenSSL> genrsa -out rsa_private_key.pem 1024 ##生成私钥

OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem  ##生成公钥
OpenSSL> exit  ##退出OpenSSL程序


PHP必须先开启openssl扩展库支持

$data=array(1,2,3);   //data可任意数据格式


//签名函数,rsaPrivateKeyFilePath私钥路径

function data_sign($data,$rsaPrivateKeyFilePath) {

//读取钥文件
$priKey = file_get_contents($rsaPrivateKeyFilePath);

///转换为openssl格式密钥
$res = openssl_get_privatekey($priKey);

//签名需要把数组转换成字符串

$data=getSignContent($data);

//签名
openssl_sign($data, $sign, $res);

//释放资源
openssl_free_key($res);

//转码
$sign = base64_encode($sign);

return $sign;
}


//验证签名rsaPublicKeyFilePath公钥路径

function data_verify($data, $sign, $rsaPublicKeyFilePath) {
//读取公钥文件
$pubKey = file_get_contents($rsaPublicKeyFilePath);

//转换为openssl格式密钥
$res = openssl_get_publickey($pubKey);

//转换成字符串
$data=getSignContent($data);

//调用openssl内置方法验签,返回bool值
$result = (bool)openssl_verify($data, base64_decode($sign), $res);

//释放资源
openssl_free_key($res);

return $result;
}


//数组转换成字符串,需要开启mbstring扩展供mb_convert_encoding函数使用

function getSignContent($params) {
ksort($params);
$stringToBeSigned = "";
$i = 0;
foreach ($params as $k => $v) {
if (false === empty($v) && "@" != substr($v, 0, 1)) {

// 转换成目标字符集
$v = mb_convert_encoding($v, 'UTF-8');

if ($i == 0) {
$stringToBeSigned .= "$k" . "=" . "$v";
} else {
$stringToBeSigned .= "&" . "$k" . "=" . "$v";
}
$i++;
}
}

unset ($k, $v);
return $stringToBeSigned;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值