Table des matières
maskToken && unmaskToken
Maison développement back-end tutoriel php Introduction au chiffrement et au déchiffrement yii2

Introduction au chiffrement et au déchiffrement yii2

Jul 10, 2018 pm 03:14 PM
php yii 加密 解密

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles