可以使用openssL 来生成两个pem密钥文件
可实现:
1、可以公钥加密,私钥解密,
2、 私钥加密,公钥解密
以下的案例是就是 公钥加密,私钥解密
<?php
class AlipayRsa{
private static $PRIVATE_KEY;
private static $PUBLIC_KEY;
public function __construct($private_path,$public_path){
self::$PRIVATE_KEY=$this->getPrivateStr($private_path);
self::$PUBLIC_KEY=$this->getPublicStr($public_path);;
}
/*
*返回openssl格式的私钥
*/
public function getPrivateKey(){
$privKey=self::$PRIVATE_KEY;
return openssl_get_privatekey($privKey);
}
/*
*返回openssl格式的公钥
*/
public function getPublicKey(){
$pubKey=self::$PUBLIC_KEY;
return openssl_pkey_get_public($pubKey);
}
/*
*私钥解密
*/
public function privDecrypt($encrypted){
if(!is_string($encrypted)){
return null;
}
$encrypted = str_replace(array('-','_'),array('+','/'),$encrypted);
$mod4 = strlen($encrypted) % 4;
if ($mod4) {
$encrypted .= substr('====', $mod4);
}
return openssl_private_decrypt(base64_decode($encrypted),$decrypted,$this->getPrivateKey())? $decrypted : null;
}
/*
*公钥加密
*因为有的实际项目中,路由规则会对 / 进行键-值的解析,所以要对 base64_encode 加密过后的 /、+、= 等进行替换
*/
public function pubEncrypt($data){
if(!is_string($data)){
return null;
}
$data = openssl_public_encrypt($data,$encrypted,$this->getPublicKey())? base64_encode($encrypted) : null;
return str_replace(array('+','/','='),array('-','_',''),$data);
}
/*
*获得公钥
*/
public function getPublicStr($publicPath){
$publicStr=file_get_contents($publicPath);
return $publicStr;
}
/*
*获得私钥
*/
public function getPrivateStr($privatePath){
$privateStr=file_get_contents($privatePath);
return $privateStr;
}
}
?>