这篇文章主要介绍了关于yii2加密和解密的介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
相关环境
-
操作系统及IDE macOS 10.13.1 & PhpStorm2018.1.2
-
软件版本 PHP7.1.8 Yii2.0.14
在yii2中,管理加密解密的库叫做Security,它以yii2组件的形式存在,因此你可以通过Yii::$app->security来获取并使用它。
Security组件源代码位置如下
vendor/yiisoft/yii2/base/Security.php
Security组件一共有15个与加密解密(&编码)相关的公共方法,我们先来列一个清单。
-
encryptByPassword
-
encryptByKey
-
decryptByPassword
-
decryptByKey
-
hkdf
-
pbkdf2
-
hashData
-
validateData
-
generateRandomKey
-
generateRandomString
-
generatePasswordHash
-
validatePassword
-
compareString
-
maskToken
-
unmaskToken
我想有一些你一定没见过,没关系,我们一一去了解。
generateRandomString
之所以先说generateRandomString是因为它最常用,起码我是这样。
public function generateRandomString($length = 32){...}
生成一个随机的字符串,参数$length代表这个字符串的长度,默认32位。值得说明的是这个字符串的取值为范围是[A-Za-z0-9_-]。
generatePasswordHash & validatePassword
generatePasswordHash & validatePassword经常被用来加密用户密码以及对密码是否正确的验证,自从MD5可能被碰撞后,我们用yii2开发应用的时候,generatePasswordHash函数对密码进行加密就成为首选了,它调用了crypt函数。
一般用法如下
// 使用generatePasswordHash为用户的密码加密,$hash存储到库中$hash = Yii::$app->getSecurity()->generatePasswordHash($password);// 使用validatePassword对密码进行验证if(Yii::$app->getSecu<i style="color:transparent">@本文来源gaodai$ma#com搞$代*码6网</i><b>搞代gaodaima码</b>rity()->validatePassword($password, $hash)){ // 密码正确}else{ // 密码错误}
generateRandomKey
和generateRandomString类似,生成一个随机的串,参数为长度,默认为32位,区别在于generateRandomKey生成的不是ASCII。
简单的说 generateRandomString 约等于 base64_encode(generateRandomKey)。
encryptByPassword & decryptByPassword
编码和解码函数,使用一个秘钥对数据进行编码,然后通过此秘钥在对编码后的数据进行解码。
例子
$dat = Yii::$app->security->encryptByPassword("hello","3166886");echo Yii::$app->security->encryptByPassword($dat,"3166886");// hello
要注意,通过上面得到的编码后的数据不是ASCII,可以通过base64_encode和base64_decode在外层包装下。
encryptByKey & decryptByKey
同样是一组编码和解码函数,比通过密码的方式要快。函数声明为
public function encryptByKey($data, $inputKey, $info = null){}public function decryptByKey($data, $inputKey, $info = null){}
encryptByKey & decryptByKey 存在着第三个参数,比如我们可以传递会员的ID等,这样此信息将和$inputKey一起作为加密解密的钥匙。
hkdf
使用标准的 HKDF 算法从给定的输入键中导出一个键。在PHP7+使用的是hash_hkdf方法,小于PHP7使用hash_hmac方法。
pbkdf2
使用标准的 PBKDF2 算法从给定的密码导出一个密钥。该方法可以用来进行密码加密,不过yii2有更好的密码加密方案 generatePasswordHash。