[PHP] AES encryption----php Server and Android client

Source: Internet
Author: User
Tags decrypt mcrypt php server
<span id="Label3"></p><p><p>This article takes 128-bit AES-CBC mode encryption and decryption</p></p><p><p>1. First install the MCrypt on the Server:</p></p><p><p><span style="font-size: 18px;"><code>sudo apt-get install php5-mcrypt php5-dev</code></span></p></p><p><p>sudo php5enmod mcrypt</p></p><p><p>sudo service apache2 restart</p></p><p><p>2.PHP service-side AES Encryption Class code</p></p><pre class="brush:php;gutter:true;">Class MCrypt {private $iv = ' fedcba9876543210 ';//initialization Vector IV public $KEY;//AES encrypted key key/ /transfer key $key into this class function __construct ($key) {$this->key= $key; }//cryptographic function Encrypt ($str) {//$key = $this->hex2bin ($key); $iv = $this->iv; $TD = Mcrypt_module_open (' rijndael-128 ', ', ' CBC ', $iv); Mcrypt_generic_init ($td, $this->key, $iv); $encrypted = Mcrypt_generic ($td, $str); \ocp\util::writelog (' ***mcrypt $key * * *, $this->key, \ocp\util::error); Mcrypt_generic_deinit ($td); Mcrypt_module_close ($td); return Bin2Hex ($encrypted); }//decryption function Decrypt ($code) {//$key = $this->hex2bin ($key); $code = $this->hex2bin ($code); $iv = $this->iv; $TD = MCrypt_module_open (' rijndael-128 ', ', ' CBC ', $iv); Mcrypt_generic_init ($td, $this->key, $iv); $decrypted = Mdecrypt_generic ($td, $code); Mcrypt_generic_deinit ($td); Mcrypt_module_close ($td); return Utf8_encode (trim ($decrypted)); } protected function Hex2bin ($hexdata) {$bindata = '; For ($i = 0; $i < strlen ($hexdata); $i + = 2) {$bindata. = chr (hexdec (substr ($hexdata, $i, 2))); } return $bindata; } }</pre><p><p>4.PHP Server calls the ASE encryption class Code:</p></p><pre><pre><span style="color: #800080;">$key</span>= ""<span style="color: #000000;">;//add The AES key yourself</span> <span style="color: #008000;">//</span> <span style="color: #008000;">Pass the encrypted key into the AES class</span> <span style="color: #800080;">$mcrypt</span><span style="color: #0000ff;">new</span> mcrypt (<span style="color: #800080;">$ Key</span><span style="color: #000000;">);</span> <span style="color: #008000;">//</span> <span style="color: #008000;">AES encryption of passwords in the database</span> <span style="color: #800080;">$PSW</span> <span style="color: #800080;">$mcrypt</span>->encrypt ();</pre></pre><p><p>5.Android service-side AES Decryption code:</p></p><p><p>Create a Aesutil class in Android that needs to be called when</p></p><pre><span style="color: #008000;"><span style="color: #008000;">/**</span></span><span style="color: #008000;"><span style="color: #008000;">* AES Decryption: * Decryption of the password sent back by the server *</span></span><span style="color: #008000;"><span style="color: #008000;">*/</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Import</span></span><span style="color: #000000;"><span style="color: #000000;">java.io.UnsupportedEncodingException;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Import</span></span><span style="color: #000000;"><span style="color: #000000;">java.security.MessageDigest;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Import</span></span><span style="color: #000000;"><span style="color: #000000;">java.security.NoSuchAlgorithmException;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Import</span></span><span style="color: #000000;"><span style="color: #000000;">javax.crypto.Cipher;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Import</span></span><span style="color: #000000;"><span style="color: #000000;">javax.crypto.NoSuchPaddingException;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Import</span></span><span style="color: #000000;"><span style="color: #000000;">javax.crypto.spec.IvParameterSpec;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Import</span></span><span style="color: #000000;"><span style="color: #000000;">javax.crypto.spec.SecretKeySpec;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Import</span></span><span style="color: #000000;"><span style="color: #000000;">com.pcloud.android.ui.activity.FirstAuthenActivity;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span> <span style="color: #0000ff;"><span style="color: #0000ff;">class</span></span><span style="color: #000000;"><span style="color: #000000;">Aesutil {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span>String IV = "fedcba9876543210";<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">the virtual Iv. And the service side to maintain consistency</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span><span style="color: #000000;"><span style="color: #000000;">Ivparameterspec ivspec; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span><span style="color: #000000;"><span style="color: #000000;">Secretkeyspec keyspec; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span><span style="color: #000000;"><span style="color: #000000;">Cipher Cipher; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">private String Secretkey = "";</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">the virtual</span> key</span>String msgtoken=<span style="color: #000000;"><span style="color: #000000;">firstauthenactivity.msgtoken; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">String msgurl=firstauthenactivity.msgurl;</span></span>String msgrandom=<span style="color: #000000;"><span style="color: #000000;">firstauthenactivity.msgrandom; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">take the random number and Tokenid to the MD5 operation as the AES key, and the service side of the AES encryption key to maintain consistency</span></span>String SECRETKEY=STRINGTOMD5 (msgtoken+<span style="color: #000000;"><span style="color: #000000;">msgrandom); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span><span style="color: #000000;"><span style="color: #000000;">aesutil () {ivspec</span></span>=<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">Ivparameterspec (iv.getbytes ()); Keyspec</span></span>=<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span>Secretkeyspec (secretkey.getbytes (), "AES"<span style="color: #000000;"><span style="color: #000000;">); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Try</span></span><span style="color: #000000;"><span style="color: #000000;">{cipher</span></span>= Cipher.getinstance ("aes/cbc/nopadding"<span style="color: #000000;"><span style="color: #000000;">); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Catch</span></span><span style="color: #000000;"><span style="color: #000000;">(nosuchalgorithmexception E) {</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">TODO auto-generated Catch block</span></span><span style="color: #000000;"><span style="color: #000000;">E.printstacktrace (); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Catch</span></span><span style="color: #000000;"><span style="color: #000000;">(nosuchpaddingexception E) {</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">TODO auto-generated Catch block</span></span><span style="color: #000000;"><span style="color: #000000;">E.printstacktrace (); } } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span> <span style="color: #0000ff;"><span style="color: #0000ff;">byte</span></span>[] Encrypt (String Text)<span style="color: #0000ff;"><span style="color: #0000ff;">throws</span></span><span style="color: #000000;"><span style="color: #000000;">Exception {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(text = =<span style="color: #0000ff;"><span style="color: #0000ff;">NULL</span></span>|| Text.length () = = 0<span style="color: #000000;"><span style="color: #000000;">) </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Throw</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span>Exception ("Empty string"<span style="color: #000000;"><span style="color: #000000;">); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">byte</span></span>[] encrypted =<span style="color: #0000ff;"><span style="color: #0000ff;">NULL</span></span><span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Try</span></span><span style="color: #000000;"><span style="color: #000000;">{cipher.init (cipher.encrypt_mode, keyspec, ivspec); Encrypted</span></span>=<span style="color: #000000;"><span style="color: #000000;">cipher.dofinal (padstring (text). getBytes ()); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Catch</span></span><span style="color: #000000;"><span style="color: #000000;">(Exception E) {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Throw</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span>Exception ("[encrypt]" +<span style="color: #000000;"><span style="color: #000000;">E.getmessage ()); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">encrypted; } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span> <span style="color: #0000ff;"><span style="color: #0000ff;">byte</span></span>[] Decrypt (String Code)<span style="color: #0000ff;"><span style="color: #0000ff;">throws</span></span><span style="color: #000000;"><span style="color: #000000;">Exception {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(code = =<span style="color: #0000ff;"><span style="color: #0000ff;">NULL</span></span>|| Code.length () = = 0<span style="color: #000000;"><span style="color: #000000;">) </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Throw</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span>Exception ("Empty string"<span style="color: #000000;"><span style="color: #000000;">); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">byte</span></span>[] decrypted =<span style="color: #0000ff;"><span style="color: #0000ff;">NULL</span></span><span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Try</span></span><span style="color: #000000;"><span style="color: #000000;">{cipher.init (cipher.decrypt_mode, keyspec, ivspec); Decrypted</span></span>=<span style="color: #000000;"><span style="color: #000000;">cipher.dofinal (hextobytes (code)); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Catch</span></span><span style="color: #000000;"><span style="color: #000000;">(Exception E) {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Throw</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span>Exception ("[decrypt]" +<span style="color: #000000;"><span style="color: #000000;">E.getmessage ()); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">decrypted; } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Static</span></span>String Bytestohex (<span style="color: #0000ff;"><span style="color: #0000ff;">byte</span></span><span style="color: #000000;"><span style="color: #000000;">[] Data) { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(data==<span style="color: #0000ff;"><span style="color: #0000ff;">NULL</span></span><span style="color: #000000;"><span style="color: #000000;">) { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">NULL</span></span><span style="color: #000000;"><span style="color: #000000;">; } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>Len =<span style="color: #000000;"><span style="color: #000000;">data.length; String Str</span></span>= ""<span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>i=0; i<len; i++<span style="color: #000000;"><span style="color: #000000;">) { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>((data[i]&0xff) <16<span style="color: #000000;"><span style="color: #000000;">) Str</span></span>= str + "0" + java.lang.Integer.toHexString (data[i]&0xff<span style="color: #000000;"><span style="color: #000000;">); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span><span style="color: #000000;"><span style="color: #000000;">Str</span></span>= str + java.lang.Integer.toHexString (data[i]&0xff<span style="color: #000000;"><span style="color: #000000;">); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">str; } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Static</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">byte</span></span><span style="color: #000000;"><span style="color: #000000;">[] hextobytes (String str) {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(str==<span style="color: #0000ff;"><span style="color: #0000ff;">NULL</span></span><span style="color: #000000;"><span style="color: #000000;">) { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">NULL</span></span><span style="color: #000000;"><span style="color: #000000;">; } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(str.length () < 2<span style="color: #000000;"><span style="color: #000000;">) { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">NULL</span></span><span style="color: #000000;"><span style="color: #000000;">; } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span><span style="color: #000000;"><span style="color: #000000;"> { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>Len = Str.length ()/2<span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">byte</span></span>[] buffer =<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">byte</span></span><span style="color: #000000;"><span style="color: #000000;">[len]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>i=0; i<len; i++<span style="color: #000000;"><span style="color: #000000;">) {buffer[i]</span></span>= (<span style="color: #0000ff;"><span style="color: #0000ff;">byte</span></span>) Integer.parseint (str.substring (i*2,i*2+2), 16<span style="color: #000000;"><span style="color: #000000;">); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">buffer; } } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Static</span></span><span style="color: #000000;"><span style="color: #000000;">string padstring (string source) {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Char</span></span>Paddingchar = ' '<span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>size = 16<span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>x = Source.length ()%<span style="color: #000000;"><span style="color: #000000;">size; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>Padlength = size-<span style="color: #000000;"><span style="color: #000000;">x; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>i = 0; I < padlength; i++<span style="color: #000000;"><span style="color: #000000;">) {source</span></span>+=<span style="color: #000000;"><span style="color: #000000;">paddingchar; } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">source; }</span></span></pre><p><p>The 6.Android client calls the AES class for decryption:</p></p><pre><pre><span style="color: #008000;">//</span> <span style="color: #008000;">invoke AES Decryption</span> <span style="color: #000000;"> aesutil mcrypt; </span> <span style="color: #0000ff;">New</span> <span style="color: #000000;">aesutil (); </span> <span style="color: #0000ff;">Try</span> <span style="color: #000000;">{ </span><span style="color: #008000;">//</span> <span style="color: #008000;">AES Decryption of received password</span> <span style="color: #0000ff;">new</span> String (mcrypt.decrypt (rec[1<span style="color: #000000;">])); LOG.D (</span>"decrypted:"<span style="color: #000000;">, decrypted); </span> <span style="color: #0000ff;">Catch</span> <span style="color: #000000;">(Exception e) { </span><span style="color: #008000;">//</span> <span style="color: #008000;"> TODO auto-generated catch block</span> <span style="color: #000000;"> e.printstacktrace (); }</span></pre></pre><p><p></p></p><p><p> [php]aes Encrypted----PHP Server and Android client </p> </p></span>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.