php hex加密解密工具方法

没有评论

2014 年 05 月 14 日 at 上午 9:35分类:PHP

//Hex(Hex(Md5((原文+密钥).getBytes(“utf-8”))).getBytes(“utf-8”))
function String2Hex($string){
    $hex='';
    for ($i=0; $i < strlen($string); $i++){
        $hex .= dechex(ord($string[$i]));
    }
    return $hex;
}

function Hex2String($hex){
    $string='';
    for ($i=0; $i < strlen($hex)-1; $i+=2){
        $string .= chr(hexdec($hex[$i].$hex[$i+1]));
    }
    return $string;
}

// example:

$hex = String2Hex("test sentence...");

$data = array(
    'appId' => 'SHAN-GUO-CHI-BI', 
    'data' =>'{"appId":"SHAN-GUO-CHI-BI","cardNo":"6006012000000001"}', 
    'sig'=>'4331443139334331313645464642444544364334343742374236364335454243',
);

$key = '111111111111111111111111';

$data['sig'] = String2Hex(strtoupper(md5($data['data'] . $key)));

PHP与JAVA或者C#的3DES加密代码

没有评论

2014 年 05 月 12 日 at 下午 1:12分类:PHP

<?php
/**
 * 3DES加密处理类
 *
 * @author fbbin <fbbin@gmail.com>
 * @version 1.0 beta
 * @created 2013/04/26
 * @logs
 */
class SecretUtilTools    
{       
    //加密算法         
    function encryptForDES($input,$key)     
    {           
       $size = mcrypt_get_block_size('des','ecb');    
       $input = $this->pkcs5_pad($input, $size);    
       $td = mcrypt_module_open(MCRYPT_3DES, '', 'ecb', '');    
       $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);    
       @mcrypt_generic_init($td, $key, $iv);    
       $data = mcrypt_generic($td, $input);    
       mcrypt_generic_deinit($td);    
       mcrypt_module_close($td);    
       $data = base64_encode($data);    
       return $data;    
    }     
    //解密算法        
    function decryptForDES($encrypted,$key)    
    {           
       $encrypted = base64_decode($encrypted);    
       $td = mcrypt_module_open(MCRYPT_3DES,'','ecb','');     
       //使用MCRYPT_DES算法,cbc模式    
       $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);    
       $ks = mcrypt_enc_get_key_size($td);    
       @mcrypt_generic_init($td, $key, $iv);    
       //初始处理                   
       $decrypted = mdecrypt_generic($td, $encrypted);    
       //解密    
       mcrypt_generic_deinit($td);    
       //结束                 
       mcrypt_module_close($td);    
       $y=$this->pkcs5_unpad($decrypted);    
       return $y;       
    }  
               
    function pkcs5_pad ($text, $blocksize)     
    {           
       $pad = $blocksize - (strlen($text) % $blocksize);    
       return $text . str_repeat(chr($pad), $pad);    
    }   
          
    function pkcs5_unpad($text)     
    {           
       $pad = ord($text{strlen($text)-1});    
       if ($pad > strlen($text))    
       {    
           return false;    
       }    
       if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)    
       {    
          return false;    
       }    
       return substr($text, 0, -1 * $pad);    
    }    
}

PHP与.NET的3DES加密代码

没有评论

2014 年 05 月 12 日 at 下午 1:10分类:PHP

<?php
if (! function_exists('mcrypt_generic_init')) {
	echo ('Snda needs the mcrypt_generic_init PHP extension.');
	exit();
}
if (! function_exists('mcrypt_module_open')) {
	echo ('Snda needs the mcrypt_module_open PHP extension.');
	exit();
}

class Crypt3Des {
  /**
   * 使用3DES加密源数据
   * @param string $oriSource 源数据
   * @param string $key       密钥
   * @param string $defaultIV 加解密向量
   * @return string $result   密文
   */
  public function encryptByTDES($oriSource, $key, $defaultIV='') {
    $key = base64_decode ( $key ); //结果为24位
    $iv = base64_decode ( $defaultIV ); //结果为8位
    $oriSource = $this->addPKCS7Padding ( $oriSource );
    $td = mcrypt_module_open ( MCRYPT_3DES, '', MCRYPT_MODE_ECB, '' );
    @mcrypt_generic_init ( $td, $key, $iv );
    $result = mcrypt_generic ( $td, $oriSource );
    mcrypt_generic_deinit ( $td );
    mcrypt_module_close ( $td );
    $result = base64_encode ( $result );
    return $result;
  }

  /**
   * 使用3DES解密密文
   * @param string $encryptedData 密文
   * @param string $key           密钥
   * @param string $defaultIV     加解密向量
   * @return string $result       解密后的原文
   */
  public function decryptByTDES($encryptedData, $key, $defaultIV) {
    $key = base64_decode ( $key ); //结果为24位
    $iv = base64_decode ( $defaultIV ); //结果为8位
    $encryptedData = base64_decode ( $encryptedData );
    $td = mcrypt_module_open ( MCRYPT_3DES, '', MCRYPT_MODE_CBC, '' );
    mcrypt_generic_init ( $td, $key, $iv );
    $result = mdecrypt_generic ( $td, $encryptedData );
    mcrypt_generic_deinit ( $td );
    mcrypt_module_close ( $td );
    $result = $this->stripPKSC7Padding ( $result );
    return $result;
  }

  /**
   * 为字符串添加PKCS7 Padding
   * @param string $source    源字符串
   */
  private function addPKCS7Padding($source) {
    $block = mcrypt_get_block_size ( 'tripledes', MCRYPT_MODE_ECB );
    $pad = $block - (strlen ( $source ) % $block);
    if ($pad <= $block) {
      $char = chr ( $pad );
      $source .= str_repeat ( $char, $pad );
    }
    return $source;
  }

  /**
   * 去除字符串末尾的PKCS7 Padding
   * @param string $source    带有padding字符的字符串
   */
  public function stripPKSC7Padding($source) {
    $block = mcrypt_get_block_size ( 'tripledes', MCRYPT_MODE_ECB );
    $char = substr ( $source, - 1, 1 );
    $num = ord ( $char );
    if ($num > 8) {
      return $source;
    }
    $len = strlen ( $source );
    for($i = $len - 1; $i >= $len - $num; $i --) {
      if (ord ( substr ( $source, $i, 1 ) ) != $num) {
        return $source;
      }
    }
    $source = substr ( $source, 0, - $num );
    return $source;
  }
}

?>