PHP头条
热点:

php与java通用AES加密解密算法,aes加密解密


AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的AES加密解密算法。

php版代码如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 <?php class CryptAES {     protected $cipher = MCRYPT_RIJNDAEL_128;     protected $mode = MCRYPT_MODE_ECB;     protected $pad_method = NULL;     protected $secret_key = '';     protected $iv = '';       public function set_cipher($cipher)     {         $this->cipher = $cipher;     }       public function set_mode($mode)     {         $this->mode = $mode;     }       public function set_iv($iv)     {         $this->iv = $iv;     }       public function set_key($key)     {         $this->secret_key = $key;     }       public function require_pkcs5()     {         $this->pad_method = 'pkcs5';     }       protected function pad_or_unpad($str, $ext)     {         if ( is_null($this->pad_method) )         {             return $str;         }         else         {             $func_name = __CLASS__ . '::' . $this->pad_method . '_' . $ext . 'pad';             if ( is_callable($func_name) )             {                 $size = mcrypt_get_block_size($this->cipher, $this->mode);                 return call_user_func($func_name, $str, $size);             }         }         return $str;     }       protected function pad($str)     {         return $this->pad_or_unpad($str, '');     }       protected function unpad($str)     {         return $this->pad_or_unpad($str, 'un');     }       public function encrypt($str)     {         $str = $this->pad($str);         $td = mcrypt_module_open($this->cipher, '', $this->mode, '');           if ( empty($this->iv) )         {             $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);         }         else         {             $iv = $this->iv;         }           mcrypt_generic_init($td, $this->secret_key, $iv);         $cyper_text = mcrypt_generic($td, $str);         $rt=base64_encode($cyper_text);         //$rt = bin2hex($cyper_text);         mcrypt_generic_deinit($td);         mcrypt_module_close($td);           return $rt;     }       public function decrypt($str){         $td = mcrypt_module_open($this->cipher, '', $this->mode, '');           if ( empty($this->iv) )         {             $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);         }         else         {             $iv = $this->iv;         }           mcrypt_generic_init($td, $this->secret_key, $iv);         //$decrypted_text = mdecrypt_generic($td, self::hex2bin($str));         $decrypted_text = mdecrypt_generic($td, base64_decode($str));         $rt = $decrypted_text;         mcrypt_generic_deinit($td);         mcrypt_module_close($td);           return $this->unpad($rt);     }       public static function hex2bin($hexdata) {         $bindata = '';         $length = strlen($hexdata);         for ($i=0; $i amp;< $length; $i += 2)         {             $bindata .= chr(hexdec(substr($hexdata, $i, 2)));         }         return $bindata;     }       public static function pkcs5_pad($text, $blocksize)     {         $pad = $blocksize - (strlen($text) % $blocksize);         return $text . str_repeat(chr($pad), $pad);     }       public static 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);     } }   $keyStr = 'UITN25LMUQC436IM'; $plainText = 'this is a string will be AES_Encrypt';   $aes = new CryptAES(); $aes->set_key($keyStr); $aes->require_pkcs5(); $encText = $aes->encrypt($plainText); $decString = $aes->decrypt($encText);   echo $encText,"n",$decString;   ?>

运行结果:
fhTD0NNIzv4jUEhJuC1htFFXJ/4S/rL6tDCJPiNvJ8mVLHWOD0HWweuxHynxoZf9
this is a string will be AES_Encrypt

java版代码如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 import java.security.Key; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;   import org.apache.commons.codec.binary.Base64;    public class CryptAES {        private static final String AESTYPE ="AES/ECB/PKCS5Padding";       public static String AES_Encrypt(String keyStr, String plainText) {         byte[] encrypt = null;         try{             Key key = generateKey(keyStr);             Cipher cipher = Cipher.getInstance(AESTYPE);             cipher.init(Cipher.ENCRYPT_MODE, key);             encrypt = cipher.doFinal(plainText.getBytes());             }catch(Exception e){             e.printStackTrace();         }         return new String(Base64.encodeBase64(encrypt));     }       public static String AES_Decrypt(String keyStr, String encryptData) {         byte[] decrypt = null;         try{             Key key = generateKey(keyStr);             Cipher cipher = Cipher.getInstance(AESTYPE);             cipher.init(Cipher.DECRYPT_MODE, key);             decrypt = cipher.doFinal(Base64.decodeBase64(encryptData));         }catch(Exception e){             e.printStackTrace();         }         return new String(decrypt).trim();     }       private static Key generateKey(String key)throws Exception{         try{                        SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");             return keySpec;         }catch(Exception e){             e.printStackTrace();             throw e;         }       }       public static void main(String[] args) {                   String keyStr = "UITN25LMUQC436IM"           String plainText = "this is a string will be AES_Encrypt";                   String encText = AES_Encrypt(keyStr, plainText);         String decString = AES_Decrypt(keyStr, encText);                   System.out.println(encText);         System.out.println(decString);       } }

www.phpzy.comtrue/php/3842.htmlTechArticlephp与java通用AES加密解密算法,aes加密解密 AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理...

相关文章

    暂无相关文章
相关频道:

PHP之友评论

今天推荐