ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 简介 加密模块包含两种加密方式,分别为Encrypt加密与Hash加密; 在应用程序中使用哪一种加密方式取决于业务需求,基本原则如下:如果被保护数据仅仅用作比较验证,在以后不需要还原成明文形式,则使用Hash加密;如果被保护数据在以后需要被还原成明文,则需要使用Encrypt加密。 # Hash加密 ## 创建实例 最方便的方式,从服务容器取Hash加密对象; ~~~ $hasher = app('hash'); ~~~ 手动创建; ~~~ $hasher = new \Illuminate\Hashing\BcryptHasher; ~~~ ## 加密 调用Hash加密对象的make方法; ~~~ $hasher->make('password'); ~~~ 也可以调用全局帮助函数bcrypt ~~~ bcrypt('password'); ~~~ ## 较验 因为哈希加密是不可逆的,所以要想判断是否值相等,可以调用check方法;check方法的本质是将传入值也进行哈希加密,判断加密后的字符串是否相同; ~~~ $hasher->check('password', $hasher->make('password')); ~~~ # Crypt ## 创建实例 最方便的方式,从服务容器取Encrypt加密对象;Encrypt加密对象的key密钥及cipher加密算法参数均读取config/app.php配置文件中的key及cipher值; ~~~ $encrypter = app('encrypter'); ~~~ 手动创建;Encrypt加密构造函数的第一个参数是密钥,第二个参数是加密算法类型,默认是'AES-128-CBC';密钥的长度与加密算法类型有关联,'AES-128-CBC'算法的密钥长度是16位,'AES-256-CBC'算法的密钥长度是32位; ~~~ $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方法有两个参数,第一个参数是加密的目标对象,第二个参数是布尔值,表示是否对第一个参数进行序列化操作; ~~~ $encrypter->encrypt('foo'); ~~~ 如果是加密字符串类型的对象,可以调用encryptString方法;encryptString方法只有一个参数,即字符串对象; ~~~ $encrypter->encryptString('foo'); ~~~ ## 解密 调用Encrypt加密实例的decrypt方法对指定对象进行解密;decrypt方法有两个参数,第一个参数是解密的目标对象,第二个参数是布尔值,表示是否对第一个参数进行序列化操作; ~~~ $encrypter->decrypt($encrypter->encrypt('foo')); ~~~ 与encryptString方法对应的是decryptString方法; ~~~ $encrypter->decryptString($encrypter->encryptString('foo')); ~~~