`
jickcai
  • 浏览: 238345 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AES 加密 PHP 和 JAVA 互通

阅读更多

见代码:

 

PHP代码:

 

<?php

class Security {

public static function encrypt($input, $key) {

$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

$input = Security::pkcs5_pad($input, $size);

$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');

$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

mcrypt_generic_init($td, $key, $iv);

$data = mcrypt_generic($td, $input);

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

$data = base64_encode($data);

return $data;

}

 

private static function pkcs5_pad ($text, $blocksize) {

$pad = $blocksize - (strlen($text) % $blocksize);

return $text . str_repeat(chr($pad), $pad);

}

 

public static function decrypt($sStr, $sKey) {

$decrypted= mcrypt_decrypt(

MCRYPT_RIJNDAEL_128,

$sKey,

base64_decode($sStr),

MCRYPT_MODE_ECB

);

 

$dec_s = strlen($decrypted);

$padding = ord($decrypted[$dec_s-1]);

$decrypted = substr($decrypted, 0, -$padding);

return $decrypted;

}

}

 

 

 

$key = "1234567891234567";

$data = "example";

 

$value = Security::encrypt($data , $key );

echo $value.'<br/>';

echo Security::decrypt($value, $key );

 

---------------

java 代码

 

 

 

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

 

import org.apache.commons.codec.binary.Base64;

 

public class Security {

public static String encrypt(String input, String key){

byte[] crypted = null;

try{

SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

cipher.init(Cipher.ENCRYPT_MODE, skey);

crypted = cipher.doFinal(input.getBytes());

}catch(Exception e){

System.out.println(e.toString());

}

return new String(Base64.encodeBase64(crypted));

}

 

public static String decrypt(String input, String key){

byte[] output = null;

try{

SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE, skey);

output = cipher.doFinal(Base64.decodeBase64(input));

}catch(Exception e){

System.out.println(e.toString());

}

return new String(output);

}

 

public static void main(String[] args) {

String key = "1234567891234567";

String data = "example";

System.out.println(Security.encrypt(data, key));

System.out.println(Security.decrypt(Security.encrypt(data, key), key));

}

}

 

分享到:
评论
2 楼 seraph_fd 2016-04-19  
  已取用,谢谢。
但将base64编码换成了Hex编码。
1 楼 raxliao 2015-06-11  
这个只支持16位的密钥,而且密码不能只能aes的随机码。

不过测试过后,的确是php 和java的确是互通的

相关推荐

Global site tag (gtag.js) - Google Analytics