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. 使用maven在netbeans下构建wicket项目

    在netbeans下构建wicket项目,网上流传较多的方法是直接使用netbeans的wicket插件,这种方法虽然简单,但是依赖的wicket版本较老,更新较慢,并且很容易与其他第三方库不兼容.使 ...

  2. CSS的优先级规则

    CSS的优先级规则有两类 1.位置群组规则 最高优先级为元素内嵌的style样式,如<div style=” “></div> 次高优先级为html头部中的<style& ...

  3. Windows下安装GTK+

    Step 1:到GTK官方网站上下载安装包.有32位的和64位,64位的有这句: Note that these 64-bit packages are experimental. Binary co ...

  4. C#轻量级企业事务 - TransactionScope

    using System; using System.Data.SqlClient; using System.Transactions; namespace SomeDBTransaction { ...

  5. 整理string类常见方法的使用说明

    整理String类的Length().charAt().getChars().replace().toUpperCase().toLowerCase().trim().toCharArray()使用说 ...

  6. RPC进阶篇

    RPC实现结构拆解 RPC过程调用详解:RPC 服务端通过 RpcServer 去导出(export)远程接口方法,而客户端通过 RpcClient 去引入(import)远程接口方法. 客户端像调用 ...

  7. 定制一个FlatBuffers编译器

    个人并不喜欢FlatBuffers编译器生成的代码,原因是我已经习惯了unix风格的代码. 不喜欢之处大致有以下: 1 命名法使用了Pascal命名法,而我个人习惯了小写字母加下划线式的unix式命名 ...

  8. 解决“运行arm-linux-gcc命令,提示No such file or directory”的问题

    今天在ubuntu14.04上安装arm的交叉编译器arm-linux-gcc,环境变量配置好以后,运行arm-linux-gcc命令,总提示No such file or directory.然后去 ...

  9. 【全国互虐】Fibonacci矩阵

    orz啊又被屠了 人生如此艰难 题意: 给定一个k维的n^k的超立方体 超立方体的元素Ai1,i2,...,ik 的值为f(i1+i2+...+ik-k+1) f为斐波那契数列 求该超立方体的所有元素 ...

  10. ASP.NET MVC - 发布网站

    原文地址:http://www.w3school.com.cn/aspnet/mvc_publish.asp 学习如何在不使用 Visual Web Developer 的情况下发布 MVC 应用程序 ...