aes 128 cbc java_如何把以下 java AES-128-CBC 加密方法改为 php 的实现

第三方 API 需要用到的加密,他们就一个 java demo ,需要自己改为 php 来实现,但我试了好久都没办法得到相同的结果

Java 的源码

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

byte[] crypted = null;

SecretKeySpec skey = new SecretKeySpec(getHash("MD5", key), "AES");

IvParameterSpec iv = new IvParameterSpec(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 });

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

cipher.init(Cipher.ENCRYPT_MODE, skey, iv);

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

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

}

private static byte[] getHash(String algorithm, String text) {

try {

byte[] bytes = text.getBytes("UTF-8");

final MessageDigest digest = MessageDigest.getInstance(algorithm);

digest.update(bytes);

return digest.digest();

} catch (final Exception ex) {

throw new RuntimeException(ex.getMessage());

}

}

我自己做 PHP 的实现

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

$key = hash('md5', $key, true);

$iv = '0000000000000000';

return openssl_encrypt($input, 'aes-128-cbc', $key, 0, $iv);

}

结果

key:"790757e76c8942f995675b247aa57c2a"

input:"1234"

result in java:UfczMtIAm8ewSuIGRdPTDQ==

result in PHP:wd/OTHoIXwgHGDHcj8OTgg==

如果换成把 cipher 方法换成 ECB 结果就相同了。。

我还试过 mcrypt_generic 和 mcrypt_encrypt 这两种实现,但结果和 openssl_encrypt 一模一样

求大大指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值