PHP
JAVA版AES加密转PHP
JAVA版AES加密转PHP
前两天对接银行接口,对方给过来的demo是JAVA版的,其中涉及到加密部分,用到AES加密,需要转成PHP代码,所以在这里跟大家分享一下,下面是JAVA代码:
/**
* AES加密
* 参数使用json格式,
* AES加密后再对加密后的字符串进行UrlBase64编码,
* @param data
* 需要加密的字符串
* @param aesKey
* AES key
* @return
*/
public static String encrypt(String data, String aesKey) {
try {
if (isNullOrBlank(data) || isNullOrBlank(aesKey)) {
System.out.println("AESUtil.encrypt data or aesKey is null.");
return null;
}
byte[] aesByte = UrlBase64.decode(aesKey);
SecretKeySpec skeySpec = new SecretKeySpec(aesByte, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encryptedByte = cipher.doFinal(data.getBytes("utf-8"));
return new String(UrlBase64.encode(encryptedByte));
} catch (Exception e) {
System.out.println("AESUtil.encrypt exception."+e);
return null;
}
}下面是PHP版代码:
/**
* AES加密获取data
* @param $data
* @param $key
* @return string
*/
function encrypt($data, $key)
{
$data = openssl_encrypt($data, 'aes-128-ecb', base64UrlDecode($key), OPENSSL_RAW_DATA);
return base64UrlEncode($data);
}
/**
* URL安全的字符串编码
* @param $str
* @return string
*/
function base64UrlEncode($str)
{
$data = base64_encode($str);
$data = str_replace(array('+', '/', '='), array('-', '_', '.'), $data);
return $data;
}
/**
* URL安全的字符串解码
* @param $string
* @return bool|string
*/
function base64UrlDecode($string)
{
$data = str_replace(array('-', '_'), array('+', '/', '='), $string);
$mod4 = strlen($data) % 4;
if ($mod4) {
$data .= substr('====', $mod4);
}
return base64_decode($data);
}这样就成功将JAVA版AES加密转成PHP版。
0条评论