AES.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace aes;
  3. /**
  4. * 常用对称加密算法类
  5. * 支持密钥:64/128/256 bit(字节长度8/16/32)
  6. * 支持算法:DES/AES(根据密钥长度自动匹配使用:DES:64bit AES:128/256bit)
  7. * 支持模式:CBC/ECB/OFB/CFB
  8. * 密文编码:base64字符串/十六进制字符串/二进制字符串流
  9. * 填充方式: PKCS5Padding(DES)
  10. */
  11. class CryptAES
  12. {
  13. private $hex_iv = 'SHOPvhREw5IVXAnT'; //初始化向量16位
  14. private $key = 'NjeRkITGhDvaFsRT8En2HgUaPS7fZ6Q4'; //默认密钥32位
  15. public function __construct($key) {
  16. $this->key = $key;
  17. $this->key = hash('sha256', $this->key, true);
  18. }
  19. /**
  20. * @desc AES加密
  21. * @param string $string 待加密明文字符串
  22. * @return false|string
  23. */
  24. public function encrypt($string)
  25. {
  26. $data = openssl_encrypt(
  27. $string,
  28. 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hex_iv);
  29. $data = base64_encode($data);
  30. return $data;
  31. }
  32. /**
  33. * @desc AES解密
  34. * @param string $cryptString 已加密文
  35. * @return false|string
  36. */
  37. public function decrypt($cryptString)
  38. {
  39. return openssl_decrypt(
  40. base64_decode($cryptString),
  41. 'AES-256-CBC', $this->key,
  42. OPENSSL_RAW_DATA,
  43. $this->hex_iv);
  44. }
  45. private function addPadding($string, $blockSize = 16) {
  46. $len = strlen($string);
  47. $pad = $blockSize - ($len % $blockSize);
  48. $string .= str_repeat(chr($pad), $pad);
  49. return $string;
  50. }
  51. private function strPadding($string) {
  52. $slast = ord(substr($string, -1));
  53. $slastc = chr($slast);
  54. $pcheck = substr($string, -$slast);
  55. if (preg_match("/$slastc{" . $slast . "}/", $string)) {
  56. $string = substr($string, 0, strlen($string) - $slast);
  57. return $string;
  58. } else {
  59. return false;
  60. }
  61. }
  62. public function hexToStr($hex)
  63. {
  64. $string='';
  65. for ($i=0; $i < strlen($hex)-1; $i+=2)
  66. {
  67. $string .= chr(hexdec($hex[$i].$hex[$i+1]));
  68. }
  69. return $string;
  70. }
  71. }