多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Encryption/Decryption Phalcon通过[Phalcon\\Crypt](http://docs.iphalcon.cn/api/Phalcon_Crypt.html)组件提供了加密和解密工具。这个类提供了对PHP[openssl](http://www.php.net/manual/en/book.openssl.php)的封装。 默认情况下这个组件使用AES-256-CFB。 > You must use a key length corresponding to the current algorithm. For the algorithm used by default it is 32 bytes. ## 基本使用 这个组件极易使用: ~~~ <?php use Phalcon\Crypt; // Create an instance $crypt = new Crypt(); $key = "This is a secret key (32 bytes)."; $text = "This is the text that you want to encrypt."; $encrypted = $crypt->encrypt($text, $key); echo $crypt->decrypt($encrypted, $key); ~~~ 也可以使用同一实例加密多次: ~~~ <?php use Phalcon\Crypt; // 创建实例 $crypt = new Crypt(); $texts = [ "my-key" => "This is a secret text", "other-key" => "This is a very secret", ]; foreach ($texts as $key => $text) { // 加密 $encrypted = $crypt->encrypt($text, $key); // 解密 echo $crypt->decrypt($encrypted, $key); } ~~~ ## 加密选项(Encryption Options) 下面的选项可以改变加密的行为: | 名称 | 描述 | | --- | --- | | Cipher | cipher是libmcrypt提供支持的一种加密算法。 查看这里[here](http://www.php.net/manual/en/function.openssl-get-cipher-methods.php) | 例子: ~~~ <?php use Phalcon\Crypt; // 创建实例 $crypt = new Crypt(); // 使用 blowfish $crypt->setCipher("bf-cbc"); $key = "le password"; $text = "This is a secret text"; echo $crypt->encrypt($text, $key); ~~~ ## 提供 Base64(Base64 Support) 为了方便传输或显示我们可以对加密后的数据进行[base64](http://www.php.net/manual/en/function.base64-encode.php)转码: ~~~ <?php use Phalcon\Crypt; // 创建实例 $crypt = new Crypt(); $key = "le password"; $text = "This is a secret text"; $encrypt = $crypt->encryptBase64($text, $key); echo $crypt->decryptBase64($encrypt, $key); ~~~ ## 配置加密服务(Setting up an Encryption service) 你也可以把加密组件放入服务容器中这样我们可以在应用中的任何一个地方访问这个组件: ~~~ <?php use Phalcon\Crypt; $di->set( 'crypt', function () { $crypt = new Crypt(); // 设置全局加密密钥 $crypt->setKey( "%31.1e$i86e$f!8jz" ); return $crypt; }, true ); ~~~ 然后,例如,我们可以在控制器中使用它了: ~~~ <?php use Phalcon\Mvc\Controller; class SecretsController extends Controller { public function saveAction() { $secret = new Secrets(); $text = $this->request->getPost("text"); $secret->content = $this->crypt->encrypt($text); if ($secret->save()) { $this->flash->success( "Secret was successfully created!" ); } } } ~~~