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

Android 和 PHP 之间进行数据加密传输的更多相关文章

  1. windows与linux之间文件的传输方式总结(转)

    当然,windows与linux之间文件的传输的两种方式有很多,这里就仅仅列出工作中遇到的,作为笔记: 方法一:安装SSH Secure Shell Client客户端 安装即可登录直接拖拉到linu ...

  2. Android之Activity之间跳转

    本人自学Android,想到什么就写点什么.主要是怕忘了,哈哈~请观者不要建议~ 今天写点Android窗口之间的跳转以及自己理解: 1.Android中窗口之间的跳转,就是Activity之间的跳转 ...

  3. linux与linux,linux与windows之间用SSH传输文件

    linux与linux,linux与windows之间用SSH传输文件linux与linux之间传送文件:scp file username@hostIP:文件地址    例: scp abc.txt ...

  4. 深入分析:Android中app之间的交互(二,使用ComponentName)

    在前一篇相关主题的博文中我们了解了如何使用Action来启动当前应用之外的Activity处理我们的业务逻辑,在本篇笔记中我在简单介绍一下使用ComponentName来与当前应用之外的应用进行交互. ...

  5. 如何实现windows和linux之间的文件传输

    2010-04-25 18:10 如何实现windows和linux之间的文件传输 如果想从windows中传送大量文件到Linux中,想必会难倒部分Linux初学者,尤其是文件很大时.我曾试过在li ...

  6. Android应用程序之间共享文字和图片(一)

    以下为TestReceiveShare1工程 MainActivity如下: package cn.testreceiveshare1; import java.util.ArrayList; imp ...

  7. Android应用程序之间共享文字和图片(二)

    MainActivity如下: package cn.testshare1; import java.io.File; import java.util.ArrayList; import andro ...

  8. windows与linux之间文件的传输

    这边记录一下如何在windows与linux之间进行文件的传输,下面是具体的网址. 原文地址::http://blog.csdn.net/shufac/article/details/51966276 ...

  9. 使用Xshell在Windows系统和Linux系统之间进行文件传输

    版权声明:本文为转载内容. 原博客内容https://blog.csdn.net/love666666shen/article/details/75742077 Windows系统在安装虚拟机cent ...

随机推荐

  1. Name-based virtual servers 给予名称的虚拟服务

    nginx first decides which server should process the request. Let’s start with a simple configuration ...

  2. 【转】requirejs简单入门

    博主今天正式工作啦,工作中用到了js模块化技术,这里转来一个入门教程,很易懂,转给同样刚入门的你们~~ 原地址:http://www.ruanyifeng.com/blog/2012/11/requi ...

  3. 解决Socket.IO在IE8下触发disconnect时间过长

    本文地址: http://www.cnblogs.com/blackmanba/p/solve-socketIO-IE8-emit-disconnect-too-long.html或者http://f ...

  4. QS之warning message

    Multiple message categories are specified as a comma separated list.

  5. debug 64bit dump of a 32bit process in windows 7 64bit

    In Windows 7 the TaskMgr provides one easy way to create dump for the applications. You can right cl ...

  6. Python线程

    原文出处: AstralWind 1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2. 线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样). ...

  7. dom 关键字提示

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. Northwind数据库表字段介绍

    ① Categories:种类表 相应字段: CategoryID :类型ID: CategoryName:类型名; Description:类型说明; Picture:产品样本 ② Customer ...

  9. HD2043猜密码

    密码 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission ...

  10. 成功获取并更改中兴F660光猫的超级用户密码解除四台限制

    上次雷雨后更换的中兴的F660光猫还是很不错的,很稳定,不过超级密码确实记不住,找了些资料,今天成功的更改了密码,简要的写出过程以备下次参考: 第一步:获取超级密码(已知用户名telecomadmin ...