php rsa 加密、解密、签名、验签

由于对接第三方机构使用的是java版本的rsa加解密方法,所有刚开始在网上搜到很多php版本的rsa加解密,但是对接java大多都不适用。

以下php版本是适用于对接java接口,java适用密钥再php语言使用是需要添加

-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----

使用密钥:

加密公钥  public_key.cer

解密私钥  private_key.key

签名私钥 sign_key.key

验签公钥 verify.cer

<?php
class RSAUtils{
   //加密公钥
   function redPukey()
   {	   
	   //拼接加密公钥路径
	   $encryptionKeyPath="D:/encryptions.cer";     
	   $encryptionKey4Server = file_get_contents($encryptionKeyPath);

       $pem = chunk_split(base64_encode($encryptionKey4Server),64,"\n");//转换为pem格式的公钥
       $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
       $publicKey = openssl_pkey_get_public($pem);
       return $publicKey;
   }
   
   //解密私钥
   function redPikey()
   {	   
	   //拼接解密私钥路径
	   $decryptKeyPath="D:/decrypts.key";     
	   $decryptKey4Server = file_get_contents($decryptKeyPath);

       $pem = chunk_split($decryptKey4Server,64,"\n");//转换为pem格式的私钥
       $pem = "-----BEGIN PRIVATE KEY-----\n".$pem."-----END PRIVATE KEY-----\n";
       $privateKey = openssl_pkey_get_private($pem);
       return $privateKey;
   }
   
    //签名私钥
   function redSignkey()
   {	   
	   //拼接签名路径
	   $signKeyPath="D:/DEMO/sign.key";
	   $signKey4Server = file_get_contents($signKeyPath);

       $pem = chunk_split($signKey4Server,64,"\n");//转换为pem格式的私钥
       $pem = "-----BEGIN PRIVATE KEY-----\n".$pem."-----END PRIVATE KEY-----\n";
       $signKey = openssl_pkey_get_private($pem);
       return $signKey;
   }
   
   //验签公钥
   function redVerifykey()
   {	   
	   //拼接验签路径
	   $verifyKeyPath="D:/DEMO/verify.cer";    
	   $verifyKey4Server = file_get_contents($verifyKeyPath);

       $pem = chunk_split(base64_encode($verifyKey4Server),64,"\n");//转换为pem格式的公钥
       $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
       $verifyKey = openssl_pkey_get_public($pem);
       return $verifyKey;
   }
   
   //公钥加密
   function pubkeyEncrypt($source_data, $pu_key) {
	   $data = "";
	   $dataArray = str_split($source_data, 117);
	   foreach ($dataArray as $value) {
			$encryptedTemp = ""; 
			openssl_public_encrypt($value,$encryptedTemp,$pu_key);//公钥加密
			$data .= base64_encode($encryptedTemp);
		}
		return $data;
   }
   
    //私钥解密
   function pikeyDecrypt($eccryptData,$decryptKey) {
	    $decrypted = "";
	    $decodeStr = base64_decode($eccryptData);
	    $enArray = str_split($decodeStr, 256);

		foreach ($enArray as $va) {
			openssl_private_decrypt($va,$decryptedTemp,$decryptKey);//私钥解密
			$decrypted .= $decryptedTemp;
		}
		return $decrypted;
   }
   
  
}
?>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值