正文  网络通信 > HTTP >

Android 和 PHP 之间进行数据加密传输

Android 和 PHP 之间进行数据加密传输[代码][Java]代码1mcrypt =newMCrypt();2/* Encrypt */3String encrypted = MCrypt.bytesToHex( mcrypt.encrypt("Text to Encrypt") );4/* Decrypt */5Strin......

Android 和 PHP 之间进行数据加密传输

[代码] [Java]代码

1 mcrypt = new MCrypt();
2 /* Encrypt */
3 String encrypted = MCrypt.bytesToHex( mcrypt.encrypt("Text to Encrypt") );
4 /* Decrypt */
5 String decrypted = new String( mcrypt.decrypt( encrypted ) );

[代码] [PHP]代码

1 $mcrypt = new MCrypt();
2 #Encrypt
3 $encrypted = $mcrypt->encrypt("Text to encrypt");
4 #Decrypt
5 $decrypted = $mcrypt->decrypt($encrypted);

[代码] MCrypt.java

001 /***********/
002 /**JAVA**/
003  
004     import java.security.NoSuchAlgorithmException;
005  
006     import javax.crypto.Cipher;
007     import javax.crypto.NoSuchPaddingException;
008     import javax.crypto.spec.IvParameterSpec;
009     import javax.crypto.spec.SecretKeySpec;
010  
011     public class MCrypt {
012  
013         private String iv = "fedcba9876543210";//Dummy iv (CHANGE IT!)
014         private IvParameterSpec ivspec;
015         private SecretKeySpec keyspec;
016         private Cipher cipher;
017         
018         private String SecretKey = "0123456789abcdef";//Dummy secretKey (CHANGE IT!)
019         
020         public MCrypt()
021         {
022             ivspec = new IvParameterSpec(iv.getBytes());
023  
024             keyspec = new SecretKeySpec(SecretKey.getBytes(), "AES");
025             
026             try {
027                 cipher = Cipher.getInstance("AES/CBC/NoPadding");
028             } catch (NoSuchAlgorithmException e) {
029                 // TODO Auto-generated catch block
030                 e.printStackTrace();
031             } catch (NoSuchPaddingException e) {
032                 // TODO Auto-generated catch block
033                 e.printStackTrace();
034             }
035         }
036         
037         public byte[] encrypt(String text) throws Exception
038         {
039             if(text == null || text.length() == 0)
040                 throw new Exception("Empty string");
041             
042             byte[] encrypted = null;
043  
044             try {
045                 cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
046  
047                 encrypted = cipher.doFinal(padString(text).getBytes());
048             } catch (Exception e)
049             {          
050                 throw new Exception("[encrypt] " + e.getMessage());
051             }
052             
053             return encrypted;
054         }
055         
056         public byte[] decrypt(String code) throws Exception
057         {
058             if(code == null || code.length() == 0)
059                 throw new Exception("Empty string");
060             
061             byte[] decrypted = null;
062  
063             try {
064                 cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);
065                 
066                 decrypted = cipher.doFinal(hexToBytes(code));
067             } catch (Exception e)
068             {
069                 throw new Exception("[decrypt] " + e.getMessage());
070             }
071             return decrypted;
072         }
073         
074  
075         
076         public static String bytesToHex(byte[] data)
077         {
078             if (data==null)
079             {
080                 return null;
081             }
082             
083             int len = data.length;
084             String str = "";
085             for (int i=0; i<len; i++) {
086                 if ((data[i]&amp;0xFF)&lt;16)
087                     str = str + "0" + java.lang.Integer.toHexString(data[i]&amp;0xFF);
088                 else
089                     str = str + java.lang.Integer.toHexString(data[i]&amp;0xFF);
090             }
091             return str;
092         }
093         
094             
095         public static byte[] hexToBytes(String str) {
096             if (str==null) {
097                 return null;
098             } else if (str.length() &lt; 2) {
099                 return null;
100             } else {
101                 int len = str.length() / 2;
102                 byte[] buffer = new byte[len];
103                 for (int i=0; i&lt;len; i++) {
104                     buffer[i] = (byte) Integer.parseInt(str.substring(i*2,i*2+2),16);
105                 }
106                 return buffer;
107             }
108         }
109         
110         
111  
112         private static String padString(String source)
113         {
114           char paddingChar = ' ';
115           int size = 16;
116           int x = source.length() % size;
117           int padLength = size - x;
118  
119           for (int i = 0; i &lt; padLength; i++)
120           {
121               source += paddingChar;
122           }
123  
124           return source;
125         }
126     }

[代码] mcrypt.php

 
01 /**********/
02 /**PHP**/
03  
04 &lt;?php
05  
06 class MCrypt
07 {
08     private $iv = 'fedcba9876543210'; #Same as in JAVA
09     private $key = '0123456789abcdef'; #Same as in JAVA
10  
11  
12     function __construct()
13     {
14     }
15  
16     function encrypt($str) {
17  
18       //$key = $this->hex2bin($key);   
19       $iv = $this-&gt;iv;
20  
21       $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv);
22  
23       mcrypt_generic_init($td, $this-&gt;key, $iv);
24       $encrypted = mcrypt_generic($td, $str);
25  
26       mcrypt_generic_deinit($td);
27       mcrypt_module_close($td);
28  
29       return bin2hex($encrypted);
30     }
31  
32     function decrypt($code) {
33       //$key = $this-&gt;hex2bin($key);
34       $code = $this-&gt;hex2bin($code);
35       $iv = $this-&gt;iv;
36  
37       $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv);
38  
39       mcrypt_generic_init($td, $this-&gt;key, $iv);
40       $decrypted = mdecrypt_generic($td, $code);
41  
42       mcrypt_generic_deinit($td);
43       mcrypt_module_close($td);
44  
45       return utf8_encode(trim($decrypted));
46     }
47  
48     protected function hex2bin($hexdata) {
49       $bindata = '';
50  
51       for ($i = 0; $i &lt; strlen($hexdata); $i += 2) {
52         $bindata .= chr(hexdec(substr($hexdata, $i, 2)));
53       }
54  
55       return $bindata;
56     }
57  
58 }
59 // see http://androidsnippets.com/encrypt-decrypt-between-android-and-php