AopEncrypt.php 1.6 KB

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