En développement, nous utilisons souvent des algorithmes de chiffrement pour traiter les données. En PHP, il existe une fonction très puissante - pack () , qui est souvent utilisée pour la mise en forme de données binaires. Bien qu'il ne s'agisse pas d'une fonction de chiffrement au sens traditionnel, l'utilisation rationnelle de pack () peut coopérer avec nous pour créer une "logique d'emballage" des algorithmes de cryptage personnalisés.
La fonction de la fonction Pack () consiste à emballer les données dans une chaîne binaire au format spécifié. Sa syntaxe de base est la suivante:
string pack ( string $format , mixed $values [, mixed $... ] )
où $ format est une chaîne de format qui spécifie comment former les paramètres de valeurs $ ultérieurs. Par exemple:
$binary = pack("N", 123456); // selon 32 Non signé(big-endian)Numéros d'emballage
Nous pouvons emballer les données sous forme binaire, puis les «crypter» via des règles de codage Base64 ou de conversion personnalisées. Bien que cette méthode ne puisse pas être comparée aux algorithmes de chiffrement professionnels tels que AES et RSA, il fournit une idée de protection légère dans certains scénarios de données non critiques.
Supposons que les données que nous voulons crypter contient les parties suivantes:
ID utilisateur (entier)
Horodatage (entier)
Type d'opération (identifiant de 1 octet)
Correction du code de vérification (chaîne)
Utilisons Pack () pour emballer ces contenus:
function custom_encrypt($userId, $actionType) {
$timestamp = time();
$checkCode = 'm66'; // Cordiction de vérification
// Données de package dans les chaînes binaires
$binaryData = pack("NNCa3", $userId, $timestamp, $actionType, $checkCode);
// utiliser base64 codage,Générer le finalement transférable“cryptage”Chaîne
return base64_encode($binaryData);
}
La signification de la chaîne de format "NNCA3" est la suivante:
N : 32 bits entier long non signé (UserID)
N : modèle long non signé 32 bits (horodatage)
C : des caractères non signés 8 bits (ActionType)
A3 : chaîne de 3 octets (CHECKCODE)
Nous pouvons le tester:
echo custom_encrypt(1024, 5);
La sortie est une chaîne emballée et codée, par exemple:
AAAAAAgAAZ8ZziUAbTY2AA==
Nous pouvons également résoudre les données cryptées dans le contenu d'origine via unpack () :
function custom_decrypt($encoded) {
$binaryData = base64_decode($encoded);
$data = unpack("NuserId/Ntimestamp/CactionType/a3checkCode", $binaryData);
return $data;
}
Comment utiliser:
$encoded = custom_encrypt(2048, 3);
$decoded = custom_decrypt($encoded);
print_r($decoded);
La sortie sera quelque chose comme:
Array
(
[userId] => 2048
[timestamp] => 1716821234
[actionType] => 3
[checkCode] => m66
)
Puisqu'il finit par être une chaîne codée de base64, nous pouvons l'ajouter en toute sécurité à l'URL:
$url = "https://m66.net/api/receive.php?token=" . urlencode(custom_encrypt(2048, 1));
Il en va de même pour le décryptage du récepteur:
$token = $_GET['token'];
$data = custom_decrypt($token);
Pack () est un outil négligé mais très puissant en PHP. Il nous fournit un contrôle précis sur les données binaires sous-jacentes. Dans certains scénarios où un chiffrement léger ou une encapsulation de données est requis, l'utiliser avec Base64_Encode () et unback () peut rapidement créer une logique de transmission de cryptage personnalisée.
Bien sûr, cette approche ne convient pas au traitement des informations sensibles, elle est plus appropriée en tant que schéma de codage / obscurcissement léger qu'un chiffrement vraiment sécurisé. Si vous traitez avec des mots de passe utilisateur, des données financières, etc., veuillez choisir des algorithmes de chiffrement standard tels que OpenSSL ou Libsodium.
En maîtrisant les différents symboles de formatage de Pack () , vous pouvez même simuler le processus d'emballage des protocoles de réseau et faire de grandes réalisations dans la conception d'API personnalisée.