直接上代码
<?php class AES { protected $cipher = MCRYPT_RIJNDAEL_128; //根据需要选择 protected $mode = MCRYPT_MODE_CBC; //根据需要选择 protected $pad_method = NULL; protected $secret_key = 'AadfAenfDIEldfja'; protected $iv = '1238389483762837'; public function set_cipher($cipher) { $this->cipher = $cipher; } public function set_mode($mode) { $this->mode = $mode; } public function set_iv($iv) { $this->iv = $iv; } public function set_key($key) { $this->secret_key = $key; } public function require_pkcs5() { $this->pad_method = 'pkcs5'; } protected function pad_or_unpad($str, $ext) { if ( is_null($this->pad_method) ) { return $str; } else { $func_name = __CLASS__ . '::' . $this->pad_method . '_' . $ext . 'pad'; if ( is_callable($func_name) ) { $size = mcrypt_get_block_size($this->cipher, $this->mode); return call_user_func($func_name, $str, $size); } } return $str; } protected function pad($str) { return $this->pad_or_unpad($str, ''); } protected function unpad($str) { return $this->pad_or_unpad($str, 'un'); } public function encrypt($str) { $str = $this->pad($str); $td = mcrypt_module_open($this->cipher, '', $this->mode, ''); if ( empty($this->iv) ) { $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); } else { $iv = $this->iv; } mcrypt_generic_init($td, $this->secret_key, $iv); $cyper_text = mcrypt_generic($td, $str); //$rt=base64_encode($cyper_text); $rt = bin2hex($cyper_text); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $rt; } public function decrypt($str){ $td = mcrypt_module_open($this->cipher, '', $this->mode, ''); if ( empty($this->iv) ) { $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); } else { $iv = $this->iv; } mcrypt_generic_init($td, $this->secret_key, $iv); //$decrypted_text = mdecrypt_generic($td, self::hex2bin($str)); //$decrypted_text = mdecrypt_generic($td, base64_decode($str)); $str = pack("H*", $str); $decrypted_text = mdecrypt_generic($td, $str); $rt = $decrypted_text; mcrypt_generic_deinit($td); mcrypt_module_close($td); return $this->unpad($rt); } public static function hex2bin($hexdata) { $bindata = ''; $length = strlen($hexdata); for ($i=0; $i < $length; $i += 2) { $bindata .= chr(hexdec(substr($hexdata, $i, 2))); } return $bindata; } public static function pkcs5_pad($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } public static function pkcs5_unpad($text) { $pad = ord($text{strlen($text) - 1}); if ($pad > strlen($text)) return false; if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false; return substr($text, 0, -1 * $pad); } } $plainText = '12345678'; $aes = new AES(); $aes->require_pkcs5(); $encText = $aes->encrypt($plainText); $decString = $aes->decrypt($encText); echo $encText."\n".$decString."\n";
相关推荐
本文档介绍了如何使用 PHP 实现 AES 加密,包括 AES 算法的基本原理、PHP 中的实现方法以及相关的知识点。 一、AES 算法的基本原理 AES 算法是一种对称加密算法,使用相同的密钥进行加密和解密。AES 算法的加密...
类的构造函数可能接收初始化向量(IV)和密钥作为参数,这些是AES算法的重要组成部分。IV用于增加加密的随机性,而密钥是加密和解密过程中的关键,必须保密。类中可能包含如`encrypt()`和`decrypt()`这样的方法,分别...
在C++中,通常会使用如Crypto++或OpenSSL等库来实现AES算法。这两个文件应该定义了类的接口,包括初始化密钥、设置加密模式(如CBC、ECB、CFB等)、以及执行加密和解密操作的方法。 为了使PHP和C++之间的通信有效,...
在PHP中,AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,用于保护数据的安全性。AES支持多种密钥长度,如128位、192位和256位,其中128位是默认且最常用的选择。本篇文章将深入探讨PHP中的AES-...
标题 "AES算法C++和Java互解" 涉及的核心技术是高级加密标准(AES,Advanced Encryption Standard),这是一种广泛使用的对称加密算法,用于保护数据的安全性。在这个主题下,我们将深入理解AES的工作原理,以及如何...
这是因为在不同编程语言中,AES算法的标准和实现通常是相同的,只要确保使用相同的密钥、初始向量(IV)以及加密模式,就可以在Delphi、PHP和Java之间进行无缝的数据交换。 **PHP** 和 **JAVA** 也是支持AES的编程...
PHP使用`openssl_encrypt`和`openssl_decrypt`函数实现AES。密钥和初始向量(IV)可以通过`str_pad`确保达到16字节(128位)。PHP默认使用PKCS7填充,与Java的PKCS5Padding类似。 3. **GOLang的AES ECB加密解密**...
在这个场景中,我们讨论的是前端使用jQuery配合crypto-js库进行AES加密,而后端通过PHP的openssl_decrypt函数进行解密。这是一个典型的客户端加密、服务器解密的模式,可以有效防止数据在传输过程中被截取。 **AES...
在本资源中,我们有一个采用AES算法的加密模块,它以VB(Visual Basic)语言编写,可以方便地集成到各种应用程序中,如编译成DLL后,可用于Web、ASP、PHP、Java、VB、VC、Excel、Word等多个平台。 AES加密算法基于...
AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,用于保护数据的安全性。在PHP和Java之间进行AES加密时,由于实现细节的差异,可能会导致加密结果不一致。本资源"PHP实现的AES加密类"旨在解决这...
本文将深入探讨如何使用PHP和JavaScript(JS)实现AES(Advanced Encryption Standard)加密解密技术。AES是一种强大的对称加密算法,广泛应用于数据保护,确保信息在互联网上传输时不被窃取或篡改。 首先,我们来...
当PHP服务器和uni-app客户端需要进行AES加密数据交换时,必须确保双方使用相同的密钥和IV。通常,密钥可以通过非对称加密(如RSA)在客户端和服务器之间安全地传递,而IV可以在每次加密时随机生成,并随密文一起...
- **初始化向量(IV)**:使用固定的`$iv_string`作为IV,虽然这在某些场景下可能不够安全,但对于简单应用足够。 - **填充算法**:使用PKCS7填充算法对不足块大小的字符串进行填充,以确保加密数据的完整性。 - **...
在PHP中,`openssl_encrypt`函数是用于执行各种加密操作的核心工具,包括使用AES-128-ECB(Advanced Encryption Standard with a 128-bit key in Electronic Codebook mode)算法进行数据加密和解密。AES是一种广泛...
AES128指的是AES算法中使用128位(16字节)的密钥长度,这种长度的密钥提供了非常高的安全性。ECB模式是AES加密的一种工作模式,它将明文分成固定大小的块独立加密,但不考虑前后块的关联,因此在处理大量重复数据时...
在PHP中,可以使用内置的mcrypt库或者openssl扩展来实现AES加密。然而,根据提供的文件名`aesctr.class.php`和`aes.class.php`,我们可以推测这可能是两个自定义的AES加密类。此类文件通常包含了一系列方法,用于...
使用CBC模式时,我们需要创建一个`Aes`实例,设置Key和IV,然后使用`CreateEncryptor`或`CreateDecryptor`方法生成加密或解密的ICryptoTransform对象。之后,我们可以用`TransformFinalBlock`方法处理数据。注意,...
在这里,IV使用`mcrypt_create_iv`随机生成,但由于使用了ECB模式,IV实际上并未使用。`decrypt`方法则对应地进行解密。 请注意,PHP的`mcrypt`扩展在较新的版本中已被弃用,建议使用`openssl`扩展来进行加密解密...
AES,全称Advanced Encryption Standard(高级加密标准),是一种广泛应用的块密码算法,为现代数据加密提供了强健的安全保障。在.NET和PHP之间进行AES加密的数据交换时,确保两端的加密结果一致是至关重要的,这...
AES是一种广泛采用的对称加密算法,具有较高的安全性和效率。 首先,我们需要了解AES加密的基本原理。AES使用相同的密钥进行加密和解密,它的工作模式有ECB(电子密码本)、CBC(密码分组链接)、CFB(密码反馈)等...