当前位置:首页 > PHP教程 > php应用 > 列表

兼容PHP和Java的des加密解密代码分享

发布:smiling 来源: PHP粉丝网  添加日期:2021-03-03 11:44:12 浏览: 评论:0 

这篇文章主要介绍了兼容PHP和Java的des加密解密代码分享,适合如服务器是JAVA语言编写,客户端是PHP编写,并需要des加密解密的情况,需要的朋友可以参考下

php代码:

  1. <?php 
  2. class DES 
  3.     var $key
  4.     var $iv//偏移量 
  5.    
  6.     function DES($key$iv=0) 
  7.     { 
  8.         $this->key = $key
  9.         if($iv == 0) 
  10.         { 
  11.             $this->iv = $key
  12.         } 
  13.         else 
  14.         { 
  15.             $this->iv = $iv
  16.         } 
  17.     } 
  18.    
  19.     //加密 
  20.     function encrypt($str
  21.     {        
  22.         $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC ); 
  23.         $str = $this->pkcs5Pad ( $str$size ); 
  24.    
  25.         $data=mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv); 
  26.         //$data=strtoupper(bin2hex($data)); //返回大写十六进制字符串 
  27.         return base64_encode($data); 
  28.     } 
  29.    
  30.     //解密 
  31.     function decrypt($str
  32.     { 
  33.         $str = base64_decode ($str); 
  34.         //$strBin = $this->hex2bin( strtolower($str)); 
  35.         $str = mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_DECRYPT, $this->iv ); 
  36.         $str = $this->pkcs5Unpad( $str ); 
  37.         return $str
  38.     } 
  39.    
  40.     function hex2bin($hexData
  41.     { 
  42.         $binData = ""
  43.         for($i = 0; $i < strlen ( $hexData ); $i += 2) 
  44.         { 
  45.             $binData .= chr(hexdec(substr($hexData$i, 2))); 
  46.         } 
  47.         return $binData
  48.     } 
  49.    
  50.     function pkcs5Pad($text$blocksize
  51.     { 
  52.         $pad = $blocksize - (strlen ( $text ) % $blocksize); 
  53.         return $text . str_repeat ( chr ( $pad ), $pad ); 
  54.     } 
  55.    
  56.     function pkcs5Unpad($text
  57.     { 
  58.         $pad = ord ( $text {strlen ( $text ) - 1} ); 
  59.         if ($pad > strlen ( $text )) 
  60.             return false; 
  61.         if (strspn ( $textchr ( $pad ), strlen ( $text ) - $pad ) != $pad
  62.             return false; 
  63.         return substr ( $text, 0, - 1 * $pad ); 
  64.     } 
  65. $str = 'abcd'
  66. $key'asdfwef5'
  67. $crypt = new DES($key); 
  68. $mstr = $crypt->encrypt($str); 
  69. $str = $crypt->decrypt($mstr); 
  70.    
  71. echo $str.' <=> '.$mstr
  72.    
  73. ?> 

java代码:

  1. package com.test; 
  2.    
  3. import it.sauronsoftware.base64.Base64; 
  4.    
  5. import java.security.Key; 
  6. import java.security.SecureRandom; 
  7. import java.security.spec.AlgorithmParameterSpec; 
  8.    
  9. import javax.crypto.Cipher; 
  10. import javax.crypto.SecretKeyFactory; 
  11. import javax.crypto.spec.DESKeySpec; 
  12. import javax.crypto.spec.IvParameterSpec; 
  13.    
  14. public class Main 
  15.  public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding"
  16.  /** 
  17.   * DES算法,加密 
  18.   * 
  19.   * @param data 待加密字符串 
  20.   * @param key 加密私钥,长度不能够小于8位 
  21.   * @return 加密后的字节数组,一般结合Base64编码使用 
  22.   * @throws CryptException 异常 
  23.   */ 
  24.  public static String encode(String key,String data) throws Exception 
  25.  { 
  26.   return encode(key, data.getBytes()); 
  27.  } 
  28.  /** 
  29.   * DES算法,加密 
  30.   * 
  31.   * @param data 待加密字符串 
  32.   * @param key 加密私钥,长度不能够小于8位 
  33.   * @return 加密后的字节数组,一般结合Base64编码使用 
  34.   * @throws CryptException 异常 
  35.   */ 
  36.  public static String encode(String key,byte[] data) throws Exception 
  37.  { 
  38.   try 
  39.   { 
  40.         DESKeySpec dks = new DESKeySpec(key.getBytes()); 
  41.    
  42.         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 
  43.    //key的长度不能够小于8位字节 
  44.    Key secretKey = keyFactory.generateSecret(dks); 
  45.    Cipher cipher = Cipher.getInstance(ALGORITHM_DES); 
  46.    IvParameterSpec iv = new IvParameterSpec(key.getBytes()); 
  47.    AlgorithmParameterSpec paramSpec = iv; 
  48.    cipher.init(Cipher.ENCRYPT_MODE, secretKey,paramSpec); 
  49.    
  50.    byte[] bytes = cipher.doFinal(data); 
  51.    
  52.    
  53. //   return byte2hex(bytes); 
  54.    return new String(Base64.encode(bytes)); 
  55.   } catch (Exception e) 
  56.   { 
  57.    throw new Exception(e); 
  58.   } 
  59.  } 
  60.    
  61.  /** 
  62.   * DES算法,解密 
  63.   * 
  64.   * @param data 待解密字符串 
  65.   * @param key 解密私钥,长度不能够小于8位 
  66.   * @return 解密后的字节数组 
  67.   * @throws Exception 异常 
  68.   */ 
  69.  public static byte[] decode(String key,byte[] data) throws Exception 
  70.  { 
  71.   try 
  72.   { 
  73.     SecureRandom sr = new SecureRandom(); 
  74.         DESKeySpec dks = new DESKeySpec(key.getBytes()); 
  75.         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 
  76.    //key的长度不能够小于8位字节 
  77.    Key secretKey = keyFactory.generateSecret(dks); 
  78.    Cipher cipher = Cipher.getInstance(ALGORITHM_DES); 
  79.    IvParameterSpec iv = new IvParameterSpec(key.getBytes()); 
  80.    AlgorithmParameterSpec paramSpec = iv; 
  81.    cipher.init(Cipher.DECRYPT_MODE, secretKey,paramSpec); 
  82.    return cipher.doFinal(data); 
  83.   } catch (Exception e) 
  84.   { 
  85.    throw new Exception(e); 
  86.   } 
  87.  } 
  88.    
  89.  /** 
  90.   * 获取编码后的值 
  91.   * @param key 
  92.   * @param data 
  93.   * @return 
  94.   * @throws Exception 
  95.   */ 
  96.  public static String decodeValue(String key,String data)  
  97.  { 
  98.     byte[] datas; 
  99.     String value = null; 
  100.         try { 
  101.    
  102.             datas = decode(key, Base64.decode(data.getBytes())); 
  103.    
  104.             value = new String(datas); 
  105.         } catch (Exception e) { 
  106.             value = ""
  107.         } 
  108.     return value; 
  109.  } 
  110.    
  111.  public static void main(String[] args) throws Exception 
  112.  { 
  113.     System.out.println("明:abcd ;密:" + Main.encode("asdfwef5","abcd")); 
  114.  } 

Tags: des加密解密

分享到: