Android 和 PHP 之间进行数据加密传输
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]&0xFF)<16)
087 str = str + "0" + java.lang.Integer.toHexString(data[i]&0xFF);
088 else
089 str = str + java.lang.Integer.toHexString(data[i]&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() < 2) {
099 return null;
100 } else {
101 int len = str.length() / 2;
102 byte[] buffer = new byte[len];
103 for (int i=0; i<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 < padLength; i++)
120 {
121 source += paddingChar;
122 }
123
124 return source;
125 }
126 }
[代码] mcrypt.php 01 /**********/
02 /**PHP**/
03
04 <?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->iv;
20
21 $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv);
22
23 mcrypt_generic_init($td, $this->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->hex2bin($key);
34 $code = $this->hex2bin($code);
35 $iv = $this->iv;
36
37 $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv);
38
39 mcrypt_generic_init($td, $this->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 < 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 之间进行数据加密传输的更多相关文章
- windows与linux之间文件的传输方式总结(转)
当然,windows与linux之间文件的传输的两种方式有很多,这里就仅仅列出工作中遇到的,作为笔记: 方法一:安装SSH Secure Shell Client客户端 安装即可登录直接拖拉到linu ...
- Android之Activity之间跳转
本人自学Android,想到什么就写点什么.主要是怕忘了,哈哈~请观者不要建议~ 今天写点Android窗口之间的跳转以及自己理解: 1.Android中窗口之间的跳转,就是Activity之间的跳转 ...
- linux与linux,linux与windows之间用SSH传输文件
linux与linux,linux与windows之间用SSH传输文件linux与linux之间传送文件:scp file username@hostIP:文件地址 例: scp abc.txt ...
- 深入分析:Android中app之间的交互(二,使用ComponentName)
在前一篇相关主题的博文中我们了解了如何使用Action来启动当前应用之外的Activity处理我们的业务逻辑,在本篇笔记中我在简单介绍一下使用ComponentName来与当前应用之外的应用进行交互. ...
- 如何实现windows和linux之间的文件传输
2010-04-25 18:10 如何实现windows和linux之间的文件传输 如果想从windows中传送大量文件到Linux中,想必会难倒部分Linux初学者,尤其是文件很大时.我曾试过在li ...
- Android应用程序之间共享文字和图片(一)
以下为TestReceiveShare1工程 MainActivity如下: package cn.testreceiveshare1; import java.util.ArrayList; imp ...
- Android应用程序之间共享文字和图片(二)
MainActivity如下: package cn.testshare1; import java.io.File; import java.util.ArrayList; import andro ...
- windows与linux之间文件的传输
这边记录一下如何在windows与linux之间进行文件的传输,下面是具体的网址. 原文地址::http://blog.csdn.net/shufac/article/details/51966276 ...
- 使用Xshell在Windows系统和Linux系统之间进行文件传输
版权声明:本文为转载内容. 原博客内容https://blog.csdn.net/love666666shen/article/details/75742077 Windows系统在安装虚拟机cent ...
随机推荐
- keyCode 与charCode
键盘事件拥有两个属性,keyCode和CharCode,他们之间有一些不一样之处.keyCode表示用户按下键的实际的编码,而charCode是指用户按下字符的编码. IE下 keyCode:对于ke ...
- [转] Web 前端优化最佳实践之 Mobile(iPhone) 篇
原文链接:http://dbanotes.net/web/best_practices_for_speeding_up_your_web_site_server_mobile.html Web 前端优 ...
- 【C traps and pit falls】阅读笔记
已经是第几遍读C 陷阱与缺陷了,某种意义上,这不是一本常读常新的书,大概是因为读一遍过后就记住了. 一.编译器在将程序分解成符号的时候,使用的是大嘴法. 二.使用不对称边界有很多好处. 三.缓冲输出与 ...
- 轻松学习Linux之理解Shell的硬链接与软连接
大家在学习linux的过程中常常遇到一些模糊且容易混淆的概念比如什么是硬链接和软链接,他们有什么区别? 软连接有点象windows中的快捷方式,连接和目标文件具有相同的节点,而硬连接就好象重新复制 ...
- 第三百三十五天 how can I 坚持
晚上回来看了个奥斯卡影片,<疯狂的麦克斯-狂暴之路>,挺震撼的场面.导演确实挺厉害,不知道是怎么想象出来的. 睡觉,明天继续.
- 第二百三十六天 how can I 坚持
太冷了,羽绒服没帽子,冻的耳朵疼. 她今天没有上班,原来是调休了. 其实应该是想到点啥,就应该写下,到晚上写就又忘了,什么都不记得了,这就是个需求吧. 睡觉.
- 第二百零五天 how can I 坚持
身体无论什么时候都是最重要的.肝血管瘤,头一次听说,应该没什么大碍.父母年龄大了,我们也该尽快把自己的事情处理好,让他们放心了. 规律作息,合理饮食,多注意锻炼. 该怎么办.不能这拖下去. 好好规划下 ...
- C++11 语法记录
转自:http://blog.csdn.net/crayondeng/article/details/18563121 一.Lambda表达式 C++ 11中的Lambda表达式用于定义并创建匿名的函 ...
- Azure linux centos 默认登陆账号是什么?
什么?刚创建的linux虚拟机账号忘记了? 不要急,往下看!! Azure为我们考虑好了,默认创建centos 系统时,默认账号是azureuser,这个账号是非root权限的. 很多人在创建的时候容 ...
- 理解js闭包(二)
@(编程) 一.什么是闭包? 官方"的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 相信很少有人能直接看懂这句话,因为他 ...