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. python27+django创建app

    python manage.py startapp polls创建一个叫polls的app 编辑文件 polls/models.py : 1 from django.db import models ...

  2. 高效使用STL

    高效使用STL  参考:http://blog.jobbole.com/99115/ 仅仅是个选择的问题,都是STL,可能写出来的效率相差几倍:熟悉以下条款,高效的使用STL: 当对象很大时,建立指针 ...

  3. Android中使用logwrapper来重定向应用程序的标准输出

    在Android应用程序调试中,有时候第三方应用程序的日志输出是通过printf之类的标准函数输出的,logcat不能捕获这些日志,一个方法是使用logwrapper命令来执行第三方应用程序,logw ...

  4. Microsoft Azure云计算第一步—试用帐户申请

    从本文开始,将会对Microsoft Azure云从Iaas, Paas, Saas三种类型的云应用通过文章进行介绍.千里之行,始于帐户:),如果大家需要申请免费试用帐户请参考本文. 对于直接付钱的壕 ...

  5. gem openssl 出错

    Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources 1. ...

  6. geeksforgeeks@ Largest Number formed from an Array

    http://www.practice.geeksforgeeks.org/problem-page.php?pid=380 Largest Number formed from an Array G ...

  7. js_sl 延迟菜单

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

  8. Ubuntu 创建开机自启动脚本的方法

    http://askubuntu.com/questions/9382/how-can-i-configure-a-service-to-run-at-startuphttp://stackoverf ...

  9. 粗解Xcode 5新特性: Asset Catalogs

    原文:http://schlu.org/2013/10/01/Xcode-Asset-Catalogs.html 基础知识 在今年的WWDC大会上苹果介绍了Asset Catalogs.Asset C ...

  10. Elasticsearch template configuration

    Index templates allow defining templates thatwill automatically be applied to new indices created. T ...