展会信息港展会大全

Android 和 PHP 之间进行数据加密传输
来源:互联网   发布日期:2015-09-28 16:24:57   浏览:2094次  

导读:Android 和 PHP 之间进行数据加密传输[代码][Java]代码1mcrypt =newMCrypt();2/* Encrypt */3String encrypted = MCrypt.bytesToHex( mcrypt.encrypt(Text to Encrypt) );4/* Decrypt */5Strin......

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)&lt;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() &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

赞助本站

人工智能实验室

相关热词: PHP 加密 传输

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港