Des.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. namespace crypt;
  3. class Des {
  4. /**
  5. * @uses des 加密 cbc模式
  6. * @param string $str
  7. * @param string $key
  8. * @return string
  9. */
  10. public static function encrypt($str, $key)
  11. {
  12. $str = self::pkcsPadding($str, 8);
  13. $v = pack('H*', "1234567890abcdef");
  14. $key = str_pad($key, 8, '0'); //3DES加密将8改为24
  15. $sign = openssl_encrypt($str, 'DES-CBC', $key,OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, $v);
  16. $sign = base64_encode($sign);
  17. return $sign;
  18. }
  19. /**
  20. * @uses des解密 cbc模式
  21. * @param string $encrypted
  22. * @param string $key
  23. * @return string
  24. */
  25. public static function decrypt($encrypted, $key)
  26. {
  27. $encrypted = base64_decode($encrypted);
  28. $v = pack('H*', "1234567890abcdef");
  29. $key = str_pad($key, 8, '0'); //3DES加密将8改为24
  30. $sign = @openssl_decrypt($encrypted, 'DES-CBC', $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, $v);
  31. $sign = self::unPkcsPadding($sign);
  32. $sign = rtrim($sign);
  33. return $sign;
  34. }
  35. /**
  36. * @uses 填充
  37. * @param string $str
  38. * @param int $blocksize
  39. * @return string
  40. */
  41. private static function pkcsPadding($str, $blocksize)
  42. {
  43. $pad = $blocksize - (strlen($str) % $blocksize);
  44. return $str . str_repeat(chr($pad), $pad);
  45. }
  46. /**
  47. * @uses 去填充
  48. * @param string $str
  49. * @return string
  50. */
  51. private static function unPkcsPadding($str)
  52. {
  53. $pad = ord($str{strlen($str) - 1});
  54. if ($pad > strlen($str)) {
  55. return false;
  56. }
  57. return substr($str, 0, -1 * $pad);
  58. }
  59. }