Cet article présente principalement l'introduction au cryptage et au décryptage yii2. Il a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
Environnement associé
vendor/yiisoft/yii2/base/Security.php
generateRandomString en premier est parce que c'est le plus couramment utilisé, du moins pour moi.
public function generateRandomString($length = 32){...}
// 使用generatePasswordHash为用户的密码加密,$hash存储到库中 $hash = Yii::$app->getSecurity()->generatePasswordHash($password); // 使用validatePassword对密码进行验证 if(Yii::$app->getSecurity()->validatePassword($password, $hash)){ // 密码正确 }else{ // 密码错误 }
generateRandomString Il génère une chaîne aléatoire. , qui est par défaut de 32 bits. La différence est que generateRandomKey ne génère pas d'ASCII.
En termes simples,generateRandomString est approximativement égal à base64_encode(generateRandomKey).
encryptByPassword & decryptByPasswordLes fonctions d'encodage et de décodage utilisent une clé secrète pour encoder les données, puis utilisent cette clé secrète pour décoder les données encodées. Exemple$dat = Yii::$app->security->encryptByPassword("hello","3166886"); echo Yii::$app->security->encryptByPassword($dat,"3166886");// hello
Il convient de noter que les données codées obtenues ci-dessus ne sont pas ASCII et peuvent être empaquetées sous la couche externe via base64_encode et base64_decode.
encryptByKey & decryptByKey sont également un ensemble de fonctions d'encodage et de décodage, qui sont plus rapides que l'utilisation de mots de passe. La fonction est déclarée commepublic function encryptByKey($data, $inputKey, $info = null){} public function decryptByKey($data, $inputKey, $info = null){}
Dérivez une clé à partir d'une clé d'entrée donnée en utilisant l'algorithme HKDF standard. La méthode hash_hkdf est utilisée dans PHP7+, et la méthode hash_hmac est utilisée dans PHP7 et versions antérieures.
pbkdf2Dérivez une clé à partir du mot de passe donné en utilisant l'algorithme standard PBKDF2. Cette méthode peut être utilisée pour le cryptage des mots de passe, mais yii2 propose une meilleure solution de cryptage des mots de passegeneratePasswordHash.
hashData et validateDataParfois, afin d'éviter que le contenu ne soit falsifié, nous devons marquer les données et validateData sont la combinaison pour accomplir cette tâche.hashData est utilisé pour ajouter un préfixe de données aux données d'origine, comme le code suivant
$result = Yii::$app->security->hashData("hello",'123456',false); // ac28d602c767424d0c809edebf73828bed5ce99ce1556f4df8e223faeec60eddhello
, un nombre hexadécimal minuscule sera généré.false
validateData. Détectez les données qui ont été ajoutées avec le préfixe de données. Le code suivant
$result = Yii::$app->security->validateData("ac28d602c767424d0c809edebf73828bed5ce99ce1556f4df8e223faeec60eddhello",'123456',false); // hello
hashData(). Il indique si la valeur de hachage dans les données est au format binaire If. , cela signifie que la valeur de hachage se compose uniquement de chiffres hexadécimaux minuscules. Des chiffres hexadécimaux seront générés.false
Yii::$app->security->compareString("abc",'abc');
if($code == Yii::$app->request->get('code')){ }
而使用 compareString 比较两个字符串,无论字符串是否相等,函数的时间消耗是恒定的,这样可以有效的防止时序攻击。
maskToken用于掩盖真实token且不可以压缩,同一个token最后生成了不同的随机令牌,在yii2的csrf功能上就使用了maskToken,原理并不复杂,我们看下源码。
public function maskToken($token){ $mask = $this->generateRandomKey(StringHelper::byteLength($token)); return StringHelper::base64UrlEncode($mask . ($mask ^ $token)); }
而unmaskToken目的也很明确,用于得到被maskToken掩盖的token。
接下来我们看一个例子代码
$token = Yii::$app->security->maskToken("123456"); echo Yii::$app->security->unmaskToken($token);// 结果为 123456
最后我们总结下
加密/解密: encryptByKey()、decryptByKey()、 encryptByPassword() 和 decryptByPassword();
使用标准算法的密钥推导: pbkdf2() 和 hkdf();
防止数据篡改: hashData() 和 validateData();
密码验证: generatePasswordHash() 和 validatePassword()
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!