标准PHP的AES加密算法类

AES是分组密钥,算法输入128位数据,密钥长度也是128位。用Nr表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表1所列),每一轮都需要一个与输入分组具有相同长度的扩展密钥Expandedkey(i)的参与。

分享一个标准PHP的AES加密算法类,其中mcrypt_get_block_size('rijndael-128', 'ecb');,如果在不明白原理的情况下比较容易搞错,可以通过mcrypt_list_algorithms函数查看你需要的加密算法标识,代码如下:

  1. <?php
  2. /**
  3. * AES128加解密类
  4. * @author dy
  5. *
  6. */
  7. defined('InEjbuy') or exit('Access Invalid!');
  8. class Aes{
  9. //密钥
  10. private $_secrect_key;
  11. public function __construct(){
  12. $this->_secrect_key = 'MYgGnQE2jDFADSFFDSEWsdD';
  13. }
  14. /**
  15. * 加密方法
  16. * @param string $str
  17. * @return string
  18. */
  19. public function encrypt($str){
  20. //AES, 128 ECB模式加密数据
  21. $screct_key = $this->_secrect_key;
  22. $screct_key = base64_decode($screct_key);
  23. $str = trim($str);
  24. $str = $this->addPKCS7Padding($str);
  25. $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB),MCRYPT_RAND);
  26. $encrypt_str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_ECB, $iv);
  27. return base64_encode($encrypt_str);
  28. }
  29. /**
  30. * 解密方法
  31. * @param string $str
  32. * @return string
  33. */
  34. public function decrypt($str){
  35. //AES, 128 ECB模式加密数据
  36. $screct_key = $this->_secrect_key;
  37. $str = base64_decode($str);
  38. $screct_key = base64_decode($screct_key);
  39. $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB),MCRYPT_RAND);
  40. $encrypt_str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_ECB, $iv);
  41. $encrypt_str = trim($encrypt_str);
  42. $encrypt_str = $this->stripPKSC7Padding($encrypt_str);
  43. return $encrypt_str;
  44. }
  45. /**
  46. * 填充算法
  47. * @param string $source
  48. * @return string
  49. */
  50. function addPKCS7Padding($source){
  51. $source = trim($source);
  52. $block = mcrypt_get_block_size('rijndael-128', 'ecb');
  53. $pad = $block - (strlen($source) % $block);
  54. if ($pad <= $block) {
  55. $char = chr($pad);
  56. $source .= str_repeat($char, $pad);
  57. }
  58. return $source;
  59. }
  60. /**
  61. * 移去填充算法
  62. * @param string $source
  63. * @return string
  64. */
  65. function stripPKSC7Padding($source){
  66. $source = trim($source);
  67. $char = substr($source, -1);
  68. $num = ord($char);
  69. if($num==62)return $source;
  70. $source = substr($source,0,-$num);
  71. return $source;
  72. }
  73. }

以上就是本文所述的全部内容了,希望对大家学习php的AES加密算法类有所帮助。