PHP

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

时间:2024-08-24 14:44:53 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加密类的实例解析】相关文章:

php实习心得12-01

php实习报告11-07

怎样给电脑文件夹加密07-19

php工作总结11-11

php是什么格式?01-14

PHP Socket编程过程02-09

php开发主管的职责05-15

php开发主管的工作职责09-29

php实习报告(5篇)11-08

php实习心得7篇12-02