安全工具

class Cake\Utility\Security

安全库安全库处理基本的安全性措施,例如提供用于哈希和加密数据的函数。

加密和解密数据

static Cake\Utility\Security::encrypt($text, $key, $hmacSalt = null)
static Cake\Utility\Security::decrypt($cipher, $key, $hmacSalt = null)

使用 AES-256 加密 $text$key 应该是一个具有大量数据变化的值,类似于一个好的密码。返回的结果将是加密后的值,包含一个 HMAC 校验和。

加密/解密需要openssl扩展。

一个使用示例为

// Assuming key is stored somewhere it can be re-used for
// decryption later.
$key = 'wt1U5MACWJFTXGenFoZoiLwQGrLgdbHA';
$result = Security::encrypt($value, $key);

如果未提供 HMAC salt,则将使用 Security::getSalt() 的值。加密的值可以使用Cake\Utility\Security::decrypt()解密。

此函数**永远**不应用于存储密码。

解密之前加密的值。 $key$hmacSalt 参数必须与用于加密的值匹配,否则解密将失败。一个使用示例为

// Assuming the key is stored somewhere it can be re-used for
// Decryption later.
$key = 'wt1U5MACWJFTXGenFoZoiLwQGrLgdbHA';

$cipher = $user->secrets;
$result = Security::decrypt($cipher, $key);

如果由于密钥或 HMAC salt 的更改而无法解密该值,则将返回 false

哈希数据

static Cake\Utility\Security::hash($string, $type = NULL, $salt = false)

使用给定方法从字符串创建哈希。回退到下一个可用方法。如果 $salt 设置为 true,则将使用应用程序的 salt 值

// Using the application's salt value
$sha1 = Security::hash('CakePHP Framework', 'sha1', true);

// Using a custom salt value
$sha1 = Security::hash('CakePHP Framework', 'sha1', 'my-salt');

// Using the default hash algorithm
$hash = Security::hash('CakePHP Framework');

hash() 函数支持以下哈希策略

  • md5

  • sha1

  • sha256

以及 PHP 的 hash() 函数支持的任何其他哈希算法。

警告

在新的应用程序中,你不应该使用 hash() 来处理密码。 相反,你应该使用 DefaultPasswordHasher 类,它默认使用 bcrypt。

获取安全的随机数据

static Cake\Utility\Security::randomBytes($length)

从安全的随机源获取 $length 字节数。此函数从以下来源之一获取数据

  • PHP 的 random_bytes 函数。

  • openssl_random_pseudo_bytes 来自 SSL 扩展。

如果两个来源都不可用,将发出警告,并使用不安全的值以确保向后兼容。

static Cake\Utility\Security::randomString($length)

从安全的随机源获取一个长度为 $length 的随机字符串。此函数从与 randomBytes() 相同的随机源中获取数据,并将数据编码为十六进制字符串。