设为首页 收藏本站
查看: 470|回复: 0

[经验分享] php与java通用AES加密解密算法

[复制链接]

尚未签到

发表于 2017-12-30 18:35:49 | 显示全部楼层 |阅读模式
  php版代码如下:
<?phpclass 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版代码如下:
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);      } }  运行结果:
  fhTD0NNIzv4jUEhJuC1htFFXJ/4S/rL6tDCJPiNvJ8mVLHWOD0HWweuxHynxoZf9
  this is a string will be AES_Encrypt

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-429795-1-1.html 上篇帖子: 使用jquery+ajax+php实现搜索框的功能 下篇帖子: PHP与API讲解(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表