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版。