首页 > 代码库 > Java和PHP加解密

Java和PHP加解密

PHP代码

 1 <?php 2 //DES加解密工具 3 class DesEncrypt { 4     var $key; 5     var $iv; 6     function DesEncrypt($key, $iv=0) { 7         $this->key = $key; 8         if($iv == 0){ 9             $this->iv = $key;10         }else{11             $this->iv = $iv;12         }13     }14     function encrypt($input) {15         $size = mcrypt_get_block_size(‘des‘, ‘ecb‘);16         $input = $this->pkcs5_pad($input, $size);17         $td = mcrypt_module_open(‘des‘, ‘‘, ‘ecb‘, ‘‘);18         $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);19         @mcrypt_generic_init($td, $this->key, $iv);20         $data = mcrypt_generic($td, $input);21         mcrypt_generic_deinit($td);22         mcrypt_module_close($td);23         $data = base64_encode($data);24         return $data;25 26     }27     function decrypt($encrypted) {28         $encrypted = base64_decode($encrypted);29         $td = mcrypt_module_open(‘des‘,‘‘,‘ecb‘,‘‘);30         //使用MCRYPT_DES算法,cbc模式31         $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);32         $ks = mcrypt_enc_get_key_size($td);33         $key = substr($this->key, 0, $ks);34         $rs = @mcrypt_generic_init($td, $key, $iv);35         //初始处理36         $decrypted = mdecrypt_generic($td, $encrypted);37         //解密38         mcrypt_generic_deinit($td);39         //结束40         mcrypt_module_close($td);41         $y=$this->pkcs5_unpad($decrypted);42         return $y;43     }44     function pkcs5_pad ($text, $blocksize) {45         $pad = $blocksize - (strlen($text) % $blocksize);46         return $text . str_repeat(chr($pad), $pad);47     }48     function pkcs5_unpad($text) {49         $pad = ord($text{strlen($text)-1});50         if ($pad > strlen($text))51             return false;52         if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)53             return false;54         return substr($text, 0, -1 * $pad);55     }56 }57 58 $key = "123456789012345678901234567890123456";  //36位59 $crypt = new DesEncrypt($key);60 $str = "中国";61 $mstr = $crypt->encrypt($str);62 echo "密文:" . $mstr . "<br/>";63 64 $str = $crypt->decrypt($mstr);65 echo "明文:" . $str;

 

结果:

密文:Rm+8trB4CBQ=明文:中国

 

Java代码

  1 package com.util;  2 import java.security.Key;  3 import java.security.SecureRandom;  4   5 import javax.crypto.Cipher;  6 import javax.crypto.SecretKeyFactory;  7 import javax.crypto.spec.DESKeySpec;  8   9 import org.apache.commons.codec.binary.Base64; 10  11 import com.util.DesEncrypt; 12  13 /** 14  * 加密解密 15  * @author bian 16  * 2015 上午11:13:36 17  */ 18 public class DesEncrypt { 19     Key key; 20     public DesEncrypt(String str) { 21         try{ 22             String key = str; 23             setKey(key);// 生成密匙 24         }catch(Exception e){ 25               26         } 27     } 28  29     public DesEncrypt() { 30         setKey("heimazhifuqw233344"); 31     } 32  33     /** 34      * 根据参数生成KEY 35      */ 36     public void setKey(String strKey) { 37         try { 38             SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 39             this.key  = keyFactory.generateSecret(new DESKeySpec(strKey.getBytes("UTF8"))); 40         } catch (Exception e) { 41             throw new RuntimeException( 42                     "Error initializing SqlMap class. Cause: " + e); 43         } 44     } 45  46      47     /** 48      * 加密String明文输入,String密文输出 49      */ 50     public String encrypt(String strMing) { 51         byte[] byteMi = null; 52         byte[] byteMing = null; 53         String strMi = ""; 54         //BASE64Encoder base64en = new BASE64Encoder(); 55         try { 56             byteMing = strMing.getBytes("UTF8"); 57             byteMi = this.getEncCode(byteMing); 58             strMi = new String(Base64.encodeBase64(byteMi), "UTF8"); 59         } catch (Exception e) { 60             throw new RuntimeException( 61                     "Error initializing SqlMap class. Cause: " + e); 62         } finally { 63             //base64en = null; 64             byteMing = null; 65             byteMi = null; 66         } 67         return strMi; 68     } 69  70     /** 71      * 解密 以String密文输入,String明文输出 72      *  73      * @param strMi 74      * @return 75      */ 76     public String decrypt(String strMi) { 77         ///BASE64Decoder base64De = new BASE64Decoder(); 78         byte[] byteMing = null; 79         byte[] byteMi = null; 80         String strMing = ""; 81         try { 82             byteMi = Base64.decodeBase64(strMi); 83             byteMing = this.getDesCode(byteMi); 84             strMing = new String(byteMing, "UTF8"); 85         } catch (Exception e) { 86             throw new RuntimeException( 87                     "Error initializing SqlMap class. Cause: " + e); 88         } finally { 89             //base64De = null; 90             byteMing = null; 91             byteMi = null; 92         } 93         return strMing; 94     } 95  96     /** 97      * 加密以byte[]明文输入,byte[]密文输出 98      *  99      * @param byteS100      * @return101      */102     private byte[] getEncCode(byte[] byteS) {103         byte[] byteFina = null;104         Cipher cipher;105         try {106             cipher = Cipher.getInstance("DES");107             cipher.init(Cipher.ENCRYPT_MODE, key,SecureRandom.getInstance("SHA1PRNG"));108             byteFina = cipher.doFinal(byteS);109         } catch (Exception e) {110             throw new RuntimeException(111                     "Error initializing SqlMap class. Cause: " + e);112         } finally {113             cipher = null;114         }115         return byteFina;116     }117 118     /**119      * 解密以byte[]密文输入,以byte[]明文输出120      * 121      * @param byteD122      * @return123      */124     private byte[] getDesCode(byte[] byteD) {125         Cipher cipher;126         byte[] byteFina = null;127         try {128             cipher = Cipher.getInstance("DES");129             cipher.init(Cipher.DECRYPT_MODE, key,SecureRandom.getInstance("SHA1PRNG"));130             byteFina = cipher.doFinal(byteD);131         } catch (Exception e) {132             throw new RuntimeException(133                     "Error initializing SqlMap class. Cause: " + e);134         } finally {135             cipher = null;136         }137         return byteFina;138     }139 140     141 142     public static void main(String args[])  {143         String key = "123456789012345678901234567890123456";//36位144         String str = "中国";145         DesEncrypt des = new DesEncrypt(key);    146         147         // DES加密148         String mStr =   des.encrypt(str);149         // DES解密150         String deStr = des.decrypt(mStr);151         152         System.out.println("密文:" + mStr);153         System.out.println("明文:" + deStr);154     }155 }

 

结果:

密文:Rm+8trB4CBQ=明文:中国

 

Java和PHP加解密