欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

[笔记]几种PHP加密算法

程序员文章站 2024-01-22 19:09:22
...

1. Discuz authcode

 0 验证数据有效性         // substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16) 验证数据完整性         // 验证数据有效性,请看未加密明文的格式          if(( substr ( $result ,  0 ,  10 ) ==  0  ||  substr ( $result ,  0 ,  10 ) -  time () >  0 ) &&  substr ( $result ,  10 ,  16 ) ==  substr ( md5 ( substr ( $result ,  26 ). $keyb ),  0 ,  16 )) {             return  substr ( $result ,  26 );         } else {             return  '' ;         }     } else {          // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因         // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码          return  $keyc . str_replace ( '=' ,  '' ,  base64_encode ( $result ));     } }      $a  =  "www.test.com" ;  $b  =  authcode ( $a ,  "ENCODE" ,  "abc123" ); echo  $b . "
" ; echo authcode ( $b , "DECODE" , "abc123" );

2. 简单对称加密算法

  * @date 2013-08-13 19:30  * @update 2014-10-10 10:10  * @return String  */   function  encode ( $string  =  '' ,  $skey  =  'cxphp' ) {      $strArr  =  str_split ( base64_encode ( $string ));      $strCount  =  count ( $strArr );     foreach ( str_split ( $skey ) as  $key  =>  $value )          $key    * @date 2013-08-13 19:30  * @update 2014-10-10 10:10  * @return String  */   function  decode ( $string  =  '' ,  $skey  =  'cxphp' ) {      $strArr  =  str_split ( str_replace (array( 'O0O0O' ,  'o000o' ,  'oo00o' ), array( '=' ,  '+' ,  '/' ),  $string ),  2 );      $strCount  =  count ( $strArr );     foreach ( str_split ( $skey ) as  $key  =>  $value )          $key  ' ;  $str  =  '56,15123365247,54,四大古典风格' ; echo  "string : "  .  $str  .  " 
" ; echo "encode : " . ( $enstring = encode ( $str )) . '
' ; echo "decode : " . decode ( $enstring );

3. DES加密解密

 key  =  $key ;         if( $iv  ==  0 ){              $this -> iv  =  $key ;         }else{              $this -> iv  =  $iv ;         }     }        //加密      function  encrypt ( $str ){                 $size  =  mcrypt_get_block_size  (  MCRYPT_DES ,  MCRYPT_MODE_CBC  );          $str  =  $this -> pkcs5Pad  (  $str ,  $size  );                    $data = mcrypt_cbc ( MCRYPT_DES ,  $this -> key ,  $str ,  MCRYPT_ENCRYPT ,  $this -> iv );          //$data=strtoupper(bin2hex($data)); //返回大写十六进制字符串          return  base64_encode ( $data );     }            //解密      function  decrypt ( $str ){          $str  =  base64_decode  ( $str );          //$strBin = $this->hex2bin( strtolower($str));          $str  =  mcrypt_cbc ( MCRYPT_DES ,  $this -> key ,  $str ,  MCRYPT_DECRYPT ,  $this -> iv  );          $str  =  $this -> pkcs5Unpad (  $str  );         return  $str ;     }       function  hex2bin ( $hexData ){          $binData  =  "" ;         for( $i  =  0 ;  $i    strlen  (  $text  ))             return  false ;         if ( strspn  (  $text ,  chr  (  $pad  ),  strlen  (  $text  ) -  $pad  ) !=  $pad )             return  false ;         return  substr  (  $text ,  0 , -  1  *  $pad  );     } }  $str  =  'abc' ;  $key =  '12345678' ;  //8位内  $crypt  = new  DES ( $key );  $mstr  =  $crypt -> encrypt ( $str );  $str  =  $crypt -> decrypt ( $mstr );   echo   $str . '  ' . $mstr ;

4. PHP hex2bin

' ; echo  hexXbin ( $t );