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 ...
随机推荐
- C++标准转换运算符 --四种
具体归纳如下: reinterpret_cast 函数将一个类型的指针转换为另一个类型的指针. 这种转换不用修改指针变量值存放格式(不改变指针变量值),只需在编译时重新解释指针的类型就可做到.rein ...
- [转]caffe+Ubuntu14.0.4 64bit 环境配置说明(无CUDA,caffe在CPU下运行) --for --Amd
caffe是一个简洁高效的深度学习框架,具体介绍可以看这里,caffe环境配置过程可以参考这里,我在搭建环境时搜集了许多资料,这里整理了一下,介绍一下caffe在无CUDA的环境下如何配置. 1. 安 ...
- 定制一个FlatBuffers编译器
个人并不喜欢FlatBuffers编译器生成的代码,原因是我已经习惯了unix风格的代码. 不喜欢之处大致有以下: 1 命名法使用了Pascal命名法,而我个人习惯了小写字母加下划线式的unix式命名 ...
- (转)QR二维码生成及原理
二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字, ...
- 未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。
未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个 ...
- [cocos2d-js]chipmunk例子(二)
; ; ; ; <<; var NOT_GRABABLE_MASK = ~GRABABLE_MASK_BIT; var MainLayer = cc.Layer.extend({ _bal ...
- html5 canvas 移动小方块
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 轻松学习Linux之自动执行任务
在 Linux 中,任务可以被配置在指定的时间段.指定的日期.或系统平均载量低于指定的数量时自动运行,系统管理员可使用自动化的任务来执行定期备份.监控系统.运行定制脚本等,往往初学者都是win用户,习 ...
- C常用字符字符串处理函数
1.strtok();字符串分片函数
- cocos2d-x使用python创建vs模板
cocos2d-x 2.2推荐使用create_project.py创建工程,所有的平台都可以通过这个python文件创建工程.这个文件位置在源码cocos2d-x-2.2.2\tools\proje ...