php rsa理解

参考链接:http://www.cnblogs.com/firstForEver/p/5803940.html

 

自己封装的一个类:

<?php 



class CRsaAuthorization
{

   public static  $public_key='-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzNqnKnUn6S7WkOPQroM1rkh7j
nofhvUiWjU8N4RrHtnTW4FPz1540EXTP6n2+ohK5r1AujFaLLIk9PsM+guWY5iKk
9AoeLOSlDCX66ubuOnt0UpMK0pXwFrBl/M9FNNVVbfA/dWxbM65akhsLLB46o8/v
2oHdArVF4DVrh4rIhQIDAQAB
-----END PUBLIC KEY-----';
  
  private static  $pu_key;
  private static  $pi_key;
   
  private $licence;
    
    function __construct()
    {
      
      self::$pu_key=openssl_pkey_get_public(self::$public_key);
      // var_dump(self::$pu_key);
        
    }


    // public function get_public_key(){

    // }



 public function setPuKey($public_key){

      self::$pu_key=openssl_pkey_get_public($public_key);

 }


 public function setPiKey($private_key){
      self::$pi_key =  openssl_pkey_get_private($private_key);
 }


 public function privateDecrypt($encrypted = ''){

    // if (!is_string($encrypted)) {            
    //         return ;        
    //     }
      
     $split = str_split($encrypted, 172);// 1024bit  固定172
    foreach ($split as $part) {
        $isOkay = openssl_private_decrypt(base64_decode($part), $de_data, self::$pi_key);// base64在这里使用,因为172字节是一组,是encode来的
        if(!$isOkay){
            return false;
        }
        $decode_data .= $de_data;
    }
    return $decode_data;


 }

 public function publicDecrypt($encrypted = '')    
    {        
        if (!is_string($encrypted)) {            
            return ;        
        }

        // $encrypted = substr($encrypted,5);
        $encrypted = substr($encrypted,0,-5);

        // echo $encrypted;

        $size=strlen($encrypted);  
        // echo $size;
        $result="";
        for($i=0;$i<($size/172);$i++)
        {
          $data=substr($encrypted,$i*172,172);
          // echo $data."---------";
          if((openssl_public_decrypt(base64_decode($data), $decrypted, self::$pu_key)))
          {
            $result.=$decrypted;
            // echo $result;
          }
          else{
                // echo "decrypt failed";
              $result = "";
            }
        }       
       return $result; 
    }


public function publicEncrypt($originalData){

 
    $split = str_split($originalData, 100);// 1024bit && OPENSSL_PKCS1_PADDING  不大于117即可
    foreach ($split as $part) {
        $isOkay = openssl_public_encrypt($part, $en_data, self::$pu_key);
        if(!$isOkay){
            return false;
        }
        // echo strlen($en_data),'<br/>';
        $encode_data .= base64_encode($en_data);
    }
    return $encode_data;


}


    public function md5Checked($data,$parseLicence)
    {    

            $uid = exec('awk -F "=" \'/product_uuid/{print $2}\'  /etc/save_env',$output,$ret);
            if(empty($uid)) echo "获取uuid失败";

            // $data = 
            // $uid = "faf6d7fda265a4c65416009164398372d12f1f3d7f4cac2f";

            $chkstr=json_encode($data).$uid;
            
            // echo $chkstr."<br>";
            $strmd5=md5($chkstr);

            // echo "----".$strmd5."<br>";

            $licence="";
            
            for($i=1;$i<strlen($strmd5);$i=$i+2)
            {
                $licence .=strtoupper($strmd5[$i]);
            }
          
            // echo "licence:".$licence;



            if($licence!=$parseLicence){
                 return false;
            }else{
                 return true;
            }

    }

  


}

?>

 

posted @ 2017-01-19 15:30  cogitoergosum  阅读(231)  评论(0编辑  收藏  举报