encrypt.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace alibank;
  3. /**
  4. * 加密工具类
  5. */
  6. class encrypt
  7. {
  8. /**
  9. * 加密方法
  10. * @param string $str
  11. * @return string
  12. */
  13. public static function encrypt($str, $screct_key)
  14. {
  15. //AES, 128 模式加密数据 CBC
  16. $screct_key = base64_decode($screct_key);
  17. $str = trim($str);
  18. $str = encrypt::addPKCS7Padding($str);
  19. //设置全0的IV
  20. $iv = str_repeat("\0", 16);
  21. $encrypt_str = openssl_encrypt($str, 'aes-128-cbc', $screct_key, OPENSSL_NO_PADDING, $iv);
  22. return base64_encode($encrypt_str);
  23. }
  24. /**
  25. * 解密方法
  26. * @param string $str
  27. * @return string
  28. */
  29. public static function decrypt($str, $screct_key)
  30. {
  31. //AES, 128 模式加密数据 CBC
  32. $str = base64_decode($str);
  33. $screct_key = base64_decode($screct_key);
  34. //设置全0的IV
  35. $iv = str_repeat("\0", 16);
  36. $decrypt_str = openssl_decrypt($str, 'aes-128-cbc', $screct_key, OPENSSL_NO_PADDING, $iv);
  37. $decrypt_str = encrypt::stripPKSC7Padding($decrypt_str);
  38. return $decrypt_str;
  39. }
  40. /**
  41. * 填充算法
  42. * @param string $source
  43. * @return string
  44. */
  45. public static function addPKCS7Padding($source)
  46. {
  47. $source = trim($source);
  48. $block = 16;
  49. $pad = $block - (strlen($source) % $block);
  50. if ($pad <= $block) {
  51. $char = chr($pad);
  52. $source .= str_repeat($char, $pad);
  53. }
  54. return $source;
  55. }
  56. /**
  57. * 移去填充算法
  58. * @param string $source
  59. * @return string
  60. */
  61. public static function stripPKSC7Padding($source)
  62. {
  63. $char = substr($source, -1);
  64. $num = ord($char);
  65. if ($num == 62) return $source;
  66. $source = substr($source, 0, -$num);
  67. return $source;
  68. }
  69. }