Aes.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace app\controller;
  3. class Aes{
  4. //key长度应该为16
  5. public static $key = "rb!nBwXv4C%Gr^84";
  6. //iv长度应该为16
  7. public static $iv = "GTC9fC6JABup4EBA";
  8. //配合Java端,使用128位,256位java端默认是不支持的
  9. public static $Method = 'AES-128-CBC';
  10. // AES加密
  11. public static function encrypt($cleartext,$key = '',$iv = ''){
  12. $key = empty($key) ? self::$key : $key;
  13. $iv = empty($iv) ? self::$iv : $iv;
  14. $encrypted = openssl_encrypt($cleartext, self::$Method, $key, OPENSSL_RAW_DATA,$iv);
  15. return base64_encode($encrypted);
  16. }
  17. //AES解密
  18. public static function decrypt($encrypted,$key = ''){
  19. $key = empty($key) ? self::$key : $key;
  20. $iv = empty($iv) ? self::$iv : $iv;
  21. $encrypted = base64_decode($encrypted);
  22. $decrypted = openssl_decrypt($encrypted, self::$Method, $key, OPENSSL_RAW_DATA,$iv);
  23. return trim($decrypted);
  24. }
  25. //PHP 7.0 以上用AES加密
  26. public static function encrypt7($json_str,$rands){
  27. $screct_key = $rands;
  28. $str = trim($json_str);
  29. $str = self::addPKCS7Padding($str);
  30. $encrypt_str= openssl_encrypt($str, 'AES-128-ECB', $screct_key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING);
  31. $date = base64_encode($encrypt_str);
  32. return $date;
  33. }
  34. //PHP 7.0以上 AES填充方法
  35. public static function addPKCS7Padding($string, $blocksize = 16) {
  36. $len = strlen($string);
  37. $pad = $blocksize - ($len % $blocksize);
  38. $string .= str_repeat(chr($pad), $pad);
  39. return $string;
  40. }
  41. //PHP 7.0 AES解密以上用此方法
  42. public static function decrypt7($responsedatadata,$decrypted){
  43. $screct_key = $decrypted;
  44. $encrypt_str= openssl_decrypt($responsedatadata,"AES-128-ECB",$screct_key);
  45. $encrypt_str = preg_replace('/[\x00-\x1F]/','', $encrypt_str);
  46. return json_decode($encrypt_str,true);
  47. }
  48. }