Introduction au chiffrement et au déchiffrement yii2

不言
Libérer: 2023-04-02 22:28:02
original
2051 Les gens l'ont consulté

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é

    <.>
  • Système d'exploitation et IDE macOS 10.13.1 & PhpStorm2018.1.2

  • Version du logiciel PHP7.1.8 Yii2.0.14

Dans Dans yii2, la bibliothèque qui gère le cryptage et le déchiffrement s'appelle Security. Elle existe en tant que composant yii2, vous pouvez donc l'obtenir et l'utiliser via Yii::$app->security.

L'emplacement du code source du composant Sécurité est le suivant

vendor/yiisoft/yii2/base/Security.php
Copier après la connexion
Le composant Sécurité a un total de 15 méthodes publiques liées au cryptage et au déchiffrement (&encodage). .

  1. encryptByPassword

  2. encryptByKey

  3. decryptByPassword

  4. decryptByKey

  5. hkdf

  6. pbkdf2

  7. hashData

  8. validateData

  9. generateRandomKey

  10. generateRandomString

  11. generatePasswordHash

  12. validatePassword

  13. compareString

  14. maskToken

  15. unmaskToken

Je pense qu'il y en a que vous n'avez jamais vu auparavant. Cela n'a pas d'importance. Apprenons-les un par un.

generateRandomString

La raison pour laquelle je parle de

generateRandomString en premier est parce que c'est le plus couramment utilisé, du moins pour moi.

public function generateRandomString($length = 32){...}
Copier après la connexion
Générer une chaîne aléatoire. Le paramètre $length représente la longueur de la chaîne. La valeur par défaut est de 32 bits. Il convient d'expliquer que la plage de valeurs de cette chaîne est [A-Za-z0-9_-].

generatePasswordHash & validatePassword

generatePasswordHash & validatePassword sont souvent utilisés pour crypter les mots de passe des utilisateurs et vérifier si le mot de passe est correct. Puisque MD5 peut être entré en collision, lorsque nous utilisons yii2 pour développer des applications, la fonction generatePasswordHash. Le chiffrement du mot de passe devient le premier choix, qui appelle la fonction crypt.

L'utilisation générale est la suivante

// 使用generatePasswordHash为用户的密码加密,$hash存储到库中
$hash = Yii::$app->getSecurity()->generatePasswordHash($password);

// 使用validatePassword对密码进行验证
if(Yii::$app->getSecurity()->validatePassword($password, $hash)){
    // 密码正确
}else{
    // 密码错误
}
Copier après la connexion
generateRandomKey

est similaire à

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 & decryptByPassword

Les 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
Copier après la connexion

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 comme

public function encryptByKey($data, $inputKey, $info = null){}

public function decryptByKey($data, $inputKey, $info = null){}
Copier après la connexion
encryptByKey & decryptByKey. Par exemple, nous pouvons transmettre l'ID du membre, etc., afin que ces informations soient utilisées comme clé pour le cryptage et. décryptage avec $inputKey.

hkdf

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.

pbkdf2

Dé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 passe

generatePasswordHash.

hashData et validateData

Parfois, 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
Copier après la connexion
Vous le voyez devant bonjour Un ensemble de caractères qui varie en fonction des données originales. De cette façon, nous avons spécialement marqué les données pour éviter toute falsification, puis validateData entre en scène.

Remarque : le troisième paramètre de hashData indique si la valeur de hachage générée est au format binaire d'origine. Si c'est

, 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
Copier après la connexion
Si la chaîne d'origine est renvoyée, cela signifie que la vérification est réussie, sinon elle retournera faux. Le troisième paramètre de la fonction

validateData doit avoir la même valeur que lorsque les données ont été générées à l'aide de

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

compareString

comparaison de chaînes qui peut empêcher les attaques de synchronisation, l'utilisation est très simple. .

Yii::$app->security->compareString("abc",'abc');
Copier après la connexion
Si le résultat est vrai, ils sont égaux, sinon ils ne sont pas égaux.

Alors, qu’est-ce qu’une attaque temporelle ? Laissez-moi vous donner un exemple simple.

if($code == Yii::$app->request->get('code')){
    
}
Copier après la connexion
Dans la logique de comparaison ci-dessus, les deux chaînes sont comparées une par une à partir du premier chiffre. Si une différence est trouvée, false sera immédiatement renvoyé. Ensuite, en calculant la vitesse de retour, vous pouvez. savoir de quel chiffre il s'agit. Le début est différent, de sorte que la scène de piratage de mot de passe petit à petit qui apparaît souvent dans les films est réalisée.

而使用 compareString 比较两个字符串,无论字符串是否相等,函数的时间消耗是恒定的,这样可以有效的防止时序攻击。

maskToken && unmaskToken

maskToken用于掩盖真实token且不可以压缩,同一个token最后生成了不同的随机令牌,在yii2的csrf功能上就使用了maskToken,原理并不复杂,我们看下源码。

public function maskToken($token){
    $mask = $this->generateRandomKey(StringHelper::byteLength($token));
    return StringHelper::base64UrlEncode($mask . ($mask ^ $token));
}
Copier après la connexion

而unmaskToken目的也很明确,用于得到被maskToken掩盖的token。

接下来我们看一个例子代码

$token = Yii::$app->security->maskToken("123456");
echo Yii::$app->security->unmaskToken($token);// 结果为 123456
Copier après la connexion

最后我们总结下

  • 加密/解密: encryptByKey()、decryptByKey()、 encryptByPassword() 和 decryptByPassword();

  • 使用标准算法的密钥推导: pbkdf2() 和 hkdf();

  • 防止数据篡改: hashData() 和 validateData();

  • 密码验证: generatePasswordHash() 和 validatePassword()

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

Yii无法捕获到异常的解决方法

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!