PHP 百分网手机站

PHP实现RSA加密类的实例解析

时间:2018-06-11 20:40:16 PHP 我要投稿

PHP实现RSA加密类的实例解析

  * RSA算法类

  * 签名及密文编码:base64字符串/十六进制字符串/二进制字符串流

  * 填充方式: PKCS1Padding(加解密)/NOPadding(解密)

  *

  * Notice:Only accepts a single block. Block size is equal to the RSA key size!

  * 如密钥长度为1024 bit,则加密时数据需小于128字节,加上PKCS1Padding本身的11字节信息,所以明文需小于117字节

  *

  * @author: linvo

  * @version: 1.0.0

  * @date: 2013/1/23

  */

  class RSA{

  private $pubKey = null;

  private $priKey = null;

  /**

  * 自定义错误处理

  */

  private function _error($msg){

  die(RSA Error: . $msg); //TODO

  }

  /**

  * 构造函数

  *

  * @param string 公钥文件(验签和加密时传入)

  * @param string 私钥文件(签名和解密时传入)

  */

  public function __construct($public_key_file = , $private_key_file = ){

  if ($public_key_file){

  $this->_getPublicKey($public_key_file);

  }

  if ($private_key_file){

  $this->_getPrivateKey($private_key_file);

  }

  }

  /**

  * 生成签名

  *

  * @param string 签名材料

  * @param string 签名编码(base64/hex/bin)

  * @return 签名值

  */

  public function sign($data, $code = base64){

  $ret = false;

  if (openssl_sign($data, $ret, $this->priKey)){

  $ret = $this->_encode($ret, $code);

  }

  return $ret;

  }

  /**

  * 验证签名

  *

  * @param string 签名材料

  * @param string 签名值

  * @param string 签名编码(base64/hex/bin)

  * @return bool

  */

  public function verify($data, $sign, $code = base64){

  $ret = false;

  $sign = $this->_decode($sign, $code);

  if ($sign !== false) {

  switch (openssl_verify($data, $sign, $this->pubKey)){

  case 1: $ret = true; break;

  case 0:

  case -1:

  default: $ret = false;

  }

  }

  return $ret;

  }

  /**

  * 加密

  *

  * @param string 明文

  * @param string 密文编码(base64/hex/bin)

  * @param int 填充方式(貌似php有bug,所以目前仅支持OPENSSL_PKCS1_PADDING)

  * @return string 密文

  */

  public function encrypt($data, $code = base64, $padding = OPENSSL_PKCS1_PADDING){

  $ret = false;

  if (!$this->_checkPadding($padding, en)) $this->_error(padding error);

  if (openssl_public_encrypt($data, $result, $this->pubKey, $padding)){

  $ret = $this->_encode($result, $code);

  }

  return $ret;

  }

  /**

  * 解密

  *

  * @param string 密文

  * @param string 密文编码(base64/hex/bin)

  * @param int 填充方式(OPENSSL_P

【PHP实现RSA加密类的实例解析】相关文章:

1.PHP类的使用实例讲解

2.Javascript到PHP加密通讯的简单实现方法

3.java非对称加密的源代码(rsa)

4.PHP中curl的使用实例

5.php树型类实例代码

6.PHP中多态如何实现呢

7.将php实现过滤UBB代码

8.关于JAVA实现httpClient的实例