php转stringbuffer,java AES转成php版本 求大神看看哪里出问题

这篇博客介绍了如何使用Java实现AES加密,并将加密后的数据在PHP环境中进行解密。主要涉及到AES加密算法的使用,包括KeyGenerator的生成、密钥的编码以及Cipher的加密和解密过程。同时,还展示了Java中16进制字符串与二进制之间的转换方法。
摘要由CSDN通过智能技术生成

java类转成php版本,麻烦大神看一下php版本哪里问题

73C58BAFE578C59366D8C995CD0B9D6D

test

import java.io.UnsupportedEncodingException;

import java.security.InvalidKeyException;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.security.SecureRandom;

import javax.crypto.BadPaddingException;

import javax.crypto.Cipher;

import javax.crypto.IllegalBlockSizeException;

import javax.crypto.KeyGenerator;

import javax.crypto.NoSuchPaddingException;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

public class AESUtil {

public static void main(String[] args){

// System.out.println("Hello,it's:");

String content="test";

String password="12345678";

String estr = encrypt(content, password);

System.out.println(estr);

System.out.println(decrypt(estr, password));

}

/**将16进制转换为二进制

* @param hexStr

* @return

*/

public static byte[] parseHexStr2Byte(String hexStr) {

if (hexStr.length() < 1)

return null;

byte[] result = new byte[hexStr.length()/2];

for (int i = 0;i< hexStr.length()/2; i++) {

int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);

int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);

result[i] = (byte) (high * 16 + low);

}

return result;

}

/**将二进制转换成16进制

* @param buf

* @return

*/

public static String parseByte2HexStr(byte buf[]) {

StringBuffer sb = new StringBuffer();

for (int i = 0; i < buf.length; i++) {

String hex = Integer.toHexString(buf[i] & 0xFF);

if (hex.length() == 1) {

hex = '0' + hex;

}

sb.append(hex.toUpperCase());

}

return sb.toString();

// String result =new BigInteger(1, md.digest()).toString(16);

}

/**

* 加密

* @param content 需要加密的内容

* @param password 加密密码

* @return

*/

/* public static byte[] encrypt(String content, String password) {

try {

KeyGenerator kgen = KeyGenerator.getInstance("AES");

kgen.init(128, new SecureRandom(password.getBytes()));

SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();

SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");

Cipher cipher = Cipher.getInstance("AES");// 创建密码器

byte[] byteContent = content.getBytes("GBK");

cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化

byte[] result = cipher.doFinal(byteContent);

return result; // 加密

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (NoSuchPaddingException e) {

e.printStackTrace();

} catch (InvalidKeyException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IllegalBlockSizeException e) {

e.printStackTrace();

} catch (BadPaddingException e) {

e.printStackTrace();

}

return null;

}*/

public static String encrypt(String content, String password) {

try {

KeyGenerator kgen = KeyGenerator.getInstance("AES");

// kgen.init(128, new SecureRandom(password.getBytes()));

SecureRandom random=SecureRandom.getInstance("SHA1PRNG");

random.setSeed(password.getBytes());

kgen.init(128, random);

System.out.println("new AES Util");

SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();

SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");

Cipher cipher = Cipher.getInstance("AES");// 创建密码器

byte[] byteContent = content.getBytes("GBK");

cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化

byte[] result = cipher.doFinal(byteContent);

return parseByte2HexStr(result); // 加密

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (NoSuchPaddingException e) {

e.printStackTrace();

} catch (InvalidKeyException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IllegalBlockSizeException e) {

e.printStackTrace();

} catch (BadPaddingException e) {

e.printStackTrace();

}

return null;

}

/**解密

* @param content 待解密内容

* @param password 解密密钥

* @return

*/

/* public static byte[] decrypt(byte[] content, String password) {

try {

KeyGenerator kgen = KeyGenerator.getInstance("AES");

kgen.init(128, new SecureRandom(password.getBytes()));

SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();

SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");

Cipher cipher = Cipher.getInstance("AES");// 创建密码器

cipher.init(Cipher.DECRYPT_MODE, key);// 初始化

byte[] result = cipher.doFinal(content);

return result;

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (NoSuchPaddingException e) {

e.printStackTrace();

} catch (InvalidKeyException e) {

e.printStackTrace();

} catch (IllegalBlockSizeException e) {

e.printStackTrace();

} catch (BadPaddingException e) {

e.printStackTrace();

}

return null;

}*/

public static String decrypt(String content, String password) {

try {

KeyGenerator kgen = KeyGenerator.getInstance("AES");

// kgen.init(128, new SecureRandom(password.getBytes()));

SecureRandom random=SecureRandom.getInstance("SHA1PRNG");

random.setSeed(password.getBytes());

kgen.init(128, random);

SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();

SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");

Cipher cipher = Cipher.getInstance("AES");// 创建密码器

cipher.init(Cipher.DECRYPT_MODE, key);// 初始化

byte[] result = cipher.doFinal(parseHexStr2Byte(content));

return new String(result);

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (NoSuchPaddingException e) {

e.printStackTrace();

} catch (InvalidKeyException e) {

e.printStackTrace();

} catch (IllegalBlockSizeException e) {

e.printStackTrace();

} catch (BadPaddingException e) {

e.printStackTrace();

}

catch (Exception e) {

e.printStackTrace();

}

return null;

}

public static String md5aessign(String content, String password){

MessageDigest md;

try {

KeyGenerator kgen = KeyGenerator.getInstance("AES");

/*

* SecureRandom random=SecureRandom.getInstance("SHA1PRNG");

* //需要自己手动设置   5.

* random.setSeed(pwd.getBytes());

* 6.

* keyGen.init(128, random);

*/

// kgen.init(128, new SecureRandom(password.getBytes()));

SecureRandom random=SecureRandom.getInstance("SHA1PRNG");

random.setSeed(password.getBytes());

kgen.init(128, random);

SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();

SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");

Cipher cipher = Cipher.getInstance("AES");// 创建密码器

cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化

//准备MD5摘要算法

byte[] byteContent = content.getBytes("GBK");

md = MessageDigest.getInstance("MD5");

// 计算md5函数

md.update(byteContent);

//对md5摘要进行AES加密

byte[] result = cipher.doFinal(md.digest());

return parseByte2HexStr(result); // 转换为16进制字符串

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (NoSuchPaddingException e) {

e.printStackTrace();

} catch (InvalidKeyException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IllegalBlockSizeException e) {

e.printStackTrace();

} catch (BadPaddingException e) {

e.printStackTrace();

}

return null;

}

}

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 = bin2hex($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,

Security::hexToStr($sStr),

MCRYPT_MODE_ECB

);

$dec_s = strlen($decrypted);

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

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

return $decrypted;

}

//16进制的转为2进制字符串

public static function hexToStr($hex)

{

$bin="";

for($i=0; $i

{

$bin.=chr(hexdec($hex[$i].$hex[$i+1]));

}

return $bin;

}

}

$key = "12345678";

$data = "test";

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

echo $value.'
';

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值