教你通过AES/ECB/PKCS5Padding加密实现PHP和JAVA互通

公司和外部合作数据互通,对方的语言是java的,使用的是AES/ECB/PKCS5Padding加密方式,我这边是PHP的,这里说下两者加密互通的实现;

首先贴下Java的语言:

import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;     public class AESUtil {                      // 加密   public static String Encrypt(String sSrc, String sKey) throwsException {           if (sKey == null) {System.out.print("Key为空null");return null;                  }byte[] raw = sKey.getBytes("utf-8");SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");Cipher cipher =                  Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"cipher.init(Cipher.ENCRYPT_MODE, skeySpec);byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));    return new String(Base64.encodeBase64(encrypted));//此处使用BASE64做转码功能,同时能起到2次加密的作用。                  }// 解密                     public static String Decrypt(String sSrc, String sKey) throwsException {              try {// 判断Key是否正确if (sKey == null) {                System.out.print("Key为空null");         return null;}byte[] raw = sKey.getBytes("utf-8");SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");Cipher cipher =         Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, skeySpec);byte[] encrypted1 =Base64.decodeBase64(sSrc.getBytes());//先用base64解密try {byte[] original = cipher.doFinal(encrypted1);String originalString = new String(original,"utf-8");return originalString;                       } catch (Exception e) {System.out.println(e.toString());return null;                     }} catch (Exception ex) {       System.out.println(ex.toString());                 return null;}                      }public static void main(String[] args) throws Exception {/*                     * 此处使用AES-128-ECB加密模式,key需要为16位。                      */         String cKey = "p";// 需要加密的字串String cSrc = "WFMED";System.out.println(cSrc);// 加密                String enString = AESUtil.Encrypt(cSrc, cKey);System.out.println("加密后的字串是:" + enString);               // 解密String DeString = AESUtil.Decrypt(enString, cKey);System.out.println("解密后的字串是:" + DeString);                   }} 

现在贴上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.'
';echo "解密字符串:".Security::decrypt($value, $key );

以上就学会了如何Java和PHP的AES/ECB/PKCS5Padding加密模式PHP和JAVA互通。亲测可行哦。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部