Laravel 大将之 加密 模块

简介

加密模块包含两种加密方式,分别为Encrypt加密与Hash加密;

Encrypt加密将目标文本转换成具有不同长度的、可逆的密文;Hash加密将目标文本转换成具有相同长度的、不可逆的杂凑字符串;

在应用程序中使用哪一种加密方式取决于业务需求,基本原则如下:如果被保护数据仅仅用作比较验证,在以后不需要还原成明文形式,则使用Hash加密;如果被保护数据在以后需要被还原成明文,则需要使用Encrypt加密。

官方 API 地址

使用

Encrypt加密

创建实例

  1. 最方便的方式,从服务容器取Encrypt加密对象;Encrypt加密对象的key密钥及cipher加密算法参数均读取config/app.php配置文件中的keycipher值;

    1
    $encrypter = app('encrypter');
  2. 手动创建;Encrypt加密构造函数的第一个参数是密钥,第二个参数是加密算法类型,默认是’AES-128-CBC’;密钥的长度与加密算法类型有关联,’AES-128-CBC’算法的密钥长度是16位,’AES-256-CBC’算法的密钥长度是32位;

    1
    2
    3
    $encrypter = new Illuminate\Encryption\Encrypter(random_bytes(16));
    $encrypter = new Illuminate\Encryption\Encrypter(random_bytes(16), 'AES-128-CBC');
    $encrypter = new Illuminate\Encryption\Encrypter(random_bytes(32), 'AES-256-CBC');

加密

调用Encrypt加密实例的encrypt方法对指定对象进行加密;encrypt方法有两个参数,第一个参数是加密的目标对象,第二个参数是布尔值,表示是否对第一个参数进行序列化操作;

1
$encrypter->encrypt('foo');

如果是加密字符串类型的对象,可以调用encryptString方法;encryptString方法只有一个参数,即字符串对象;

1
$encrypter->encryptString('foo');

解密

调用Encrypt加密实例的decrypt方法对指定对象进行解密;decrypt方法有两个参数,第一个参数是解密的目标对象,第二个参数是布尔值,表示是否对第一个参数进行序列化操作;

1
$encrypter->decrypt($encrypter->encrypt('foo'));

encryptString方法对应的是decryptString方法;

1
$encrypter->decryptString($encrypter->encryptString('foo'));

Hash加密

创建实例

  1. 最方便的方式,从服务容器取Hash加密对象;

    1
    $hasher = app('hash');
  2. 手动创建;

    1
    $hasher = new \Illuminate\Hashing\BcryptHasher;

加密

调用Hash加密对象的make方法;

1
$hasher->make('password');

也可以调用全局帮助函数bcrypt

1
bcrypt('password');

较验

因为哈希加密是不可逆的,所以要想判断是否值相等,可以调用check方法;check方法的本质是将传入值也进行哈希加密,判断加密后的字符串是否相同;

1
$hasher->check('password', $hasher->make('password'));