Maison >développement back-end >Problème PHP >Comment utiliser la fonction d'extension de chiffrement Sodium en PHP

Comment utiliser la fonction d'extension de chiffrement Sodium en PHP

醉折花枝作酒筹
醉折花枝作酒筹avant
2021-06-17 17:28:312466parcourir

Cet article vous présentera comment utiliser la fonction d'extension de chiffrement Sodium en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Comment utiliser la fonction d'extension de chiffrement Sodium en PHP

Comprendre la fonction d'extension de chiffrement Sodium de PHP

Ceci est le dernier article de cette série d'extensions de chiffrement et ce que nous voulons faire. dernière extension de chiffrement PHP à connaître. L'objectif de l'émergence de Sodium est également de remplacer Mcrypt, l'extension de chiffrement originale. Mcrypt a été supprimé depuis PHP7.2 et marqué comme obsolète dans PHP7.1. Cependant, il n'existe pas beaucoup d'applications de l'extension Sodium. Dans la plupart des cas, nous utiliserons OpenSSL pour effectuer des opérations de chiffrement. En même temps, l'extension Sodium fournit de nombreuses fonctions, nous ne les comprendrons donc que dans cet article. Bien sûr, le plus important est que même la documentation officielle sur cette extension n'est pas complète. Il n'y a pas de description des paramètres pour la plupart des fonctions et très peu d'informations sont trouvées grâce aux recherches.

L'extension Sodium a été publiée avec le code source PHP après PHP7.2. Il vous suffit d'ajouter --with-sodium lors de la compilation pour l'installer avec succès. S'il s'agit d'une version antérieure à PHP7.2, vous devez installer cette extension séparément. Dans le même temps, la bibliothèque libsodium-devel doit également être installée dans le système d'exploitation.

Cryptage et décryptage AEAD_AES_256_GCM

Le premier est l'application de cette fonction de capacité de cryptage et de décryptage AEAD_AES_256_GCM. Dans le développement lié au paiement WeChat, il existe une interface qui utilise cette méthode pour crypter les données. Dans la documentation officielle, la méthode de décryptage correspondante pour PHP est également fournie, qui utilise la fonction de la bibliothèque d'extension Sodium. (Voir le deuxième lien dans le document de référence en fin d'article)

$data = '测试加密'; // 原始数据
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES); // 加密证书的随机串,加密证书的随机串
$ad = 'fullstackpm'; // 加密证书的随机串
$kengen = sodium_crypto_aead_aes256gcm_keygen(); // 密钥

// 是否可用
echo sodium_crypto_aead_aes256gcm_is_available(), PHP_EOL; // 1

// 加密
$pem = sodium_crypto_aead_aes256gcm_encrypt($data, $ad, $nonce, $kengen);
var_dump($pem);
// string(28) "��VRw!�����f��l�O�tV=\x�"

// 解密
$v = sodium_crypto_aead_aes256gcm_decrypt($pem, $ad, $nonce, $kengen);
var_dump($v);
// string(12) "测试加密"

Les commentaires dans le code ont détaillé les fonctions et paramètres pertinents. Lorsque vous l'utilisez pour décrypter le paiement WeChat, les publicités, les clés, les noms occasionnels, etc. sont tous fournis par WeChat, et à titre de démonstration ici, il s'agit tous de contenus auto-générés.

sodium_crypto_aead_aes256gcm_encrypt() Le contenu généré par le cryptage est également un contenu binaire, c'est donc également une forme de cryptage relativement sûre.

Signature d'information

La bibliothèque d'extensions Sodium nous apporte également la fonction de vérifier si les données ont été falsifiées, c'est-à-dire la possibilité de comparer les signatures sur les informations.

// 信息签名
$key = sodium_crypto_auth_keygen(); // 生成随机签名密钥
$message = '测试认证签名';

// 生成签名
$signature = sodium_crypto_auth($message, $key);
var_dump($signature);
// string(32) "�B�
//                9���l�wn�x���ӛc�ܙ�u^j��"

// 验证签名
var_dump(sodium_crypto_auth_verify($signature, $message, $key));
// bool(true)

Tout ce dont ils ont besoin est une simple clé de signature aléatoire, puis comparez le résumé de la signature avec le texte original pour déterminer si les données ont été falsifiées pendant la transmission.

Hash

Oui, vous avez bien lu, l'extension Sodium nous fournit également un ensemble de fonctions de cryptage Hash. Cependant, son utilisation est un peu plus compliquée et le contenu généré ressemble un peu à celui généré par un algorithme de hachage de mot de passe. Cependant, nous recommandons toujours d'utiliser password_hash() dans l'algorithme de hachage de mot de passe pour générer ce type de mot de passe de hachage.

// Hash
$password = '测试Hash';
$hash = sodium_crypto_pwhash_str(
    $password,
    SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, // 最大计算量
    SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE // 最大RAM量
);
var_dump($hash);
// string(97) "$argon2id$v=19$m=65536,t=2,p=1$VFfdNV4W0MFwLiLPdr9i6g$QDmd5sQToZANYTVEkPVTbPvbY7tuf1ALKU3IXrF44R0"

// 验证 Hash 信息
var_dump(sodium_crypto_pwhash_str_verify($hash, $password));
// bool(true)

Résumé

Bien que nous n'entrions pas en contact avec lui habituellement, il est vrai que l'extension Sodium a encore des applications pratiques en développement, puisque WeChat utilise ce cryptage En plus du cryptage des données, nous devrions également en avoir une compréhension plus approfondie. Cependant, nous espérons toujours que le responsable pourra améliorer la documentation au plus vite, sinon nous ne pourrons pas connaître systématiquement le contenu de cet ensemble d'extensions.

Code de test :

https://github.com/zhangyue0503/dev-blog/blob/master/php/202008/source/PHP%E7%9A%84Sodium%E5%8A%A0%E5%AF%86%E6%89%A9%E5%B1%95%E5%87%BD%E6%95%B0%E4%BA%86%E8%A7%A3.php

Apprentissage recommandé : Tutoriel vidéo 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer