简介
加密模块包含两种加密方式,分别为Encrypt加密与Hash加密;
Encrypt加密将目标文本转换成具有不同长度的、可逆的密文;Hash加密将目标文本转换成具有相同长度的、不可逆的杂凑字符串;
在应用程序中使用哪一种加密方式取决于业务需求,基本原则如下:如果被保护数据仅仅用作比较验证,在以后不需要还原成明文形式,则使用Hash加密;如果被保护数据在以后需要被还原成明文,则需要使用Encrypt加密。
官方 API 地址
- https://laravel.com/api/5.4/Illuminate/Encryption.html
- https://laravel.com/api/5.4/Illuminate/Hashing.html
使用
Encrypt加密
创建实例
最方便的方式,从服务容器取
Encrypt加密对象;Encrypt加密对象的key密钥及cipher加密算法参数均读取config/app.php配置文件中的key及cipher值;1
encrypter = app('encrypter');
手动创建;
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加密
创建实例
最方便的方式,从服务容器取
Hash加密对象;1
hasher = app('hash');
手动创建;
1
$hasher = new \Illuminate\Hashing\BcryptHasher;
加密
调用Hash加密对象的make方法;1
$hasher->make('password');
也可以调用全局帮助函数bcrypt1
bcrypt('password');
较验
因为哈希加密是不可逆的,所以要想判断是否值相等,可以调用check方法;check方法的本质是将传入值也进行哈希加密,判断加密后的字符串是否相同;1
$hasher->check('password', $hasher->make('password'));