首页 > 代码库 > 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加解密
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。