In der Entwicklung verwenden wir häufig Verschlüsselungsalgorithmen, um Daten zu verarbeiten. In PHP gibt es eine sehr leistungsstarke Funktion - pack () , die häufig zur Formatierung binärer Daten verwendet wird. Obwohl es im traditionellen Sinne keine Verschlüsselungsfunktion ist, kann die rationale Verwendung von Pack () mit uns zusammenarbeiten, um eine "Verpackungslogik" von benutzerdefinierten Verschlüsselungsalgorithmen zu erstellen.
Die Funktion der Funktion pack () besteht darin, die Daten in eine binäre Zeichenfolge im angegebenen Format zu verpacken. Die grundlegende Syntax ist wie folgt:
string pack ( string $format , mixed $values [, mixed $... ] )
wobei $ Format eine Formatzeichenfolge ist, die angibt, wie nachfolgende $ valuer -Parameter verpackt werden. Zum Beispiel:
$binary = pack("N", 123456); // entsprechend 32 Nicht signiert(big-endian)Packnummern
Wir können die Daten in Binärform packen und sie dann durch Base64 -Codierung oder benutzerdefinierte Konvertierungsregeln "verschlüsseln". Obwohl diese Methode nicht mit professionellen Verschlüsselungsalgorithmen wie AES und RSA verglichen werden kann, bietet sie in einigen nicht kritischen Datenszenarien eine leichte Schutzidee.
Angenommen, die Daten, die wir verschlüsseln möchten, enthält die folgenden Teile:
Benutzer -ID (Ganzzahl)
Zeitstempel (Ganzzahl)
Betriebstyp (1 Byte -Kennung)
Behobener Verifizierungscode (Zeichenfolge)
Verwenden wir Pack (), um diese Inhalte zu verpacken:
function custom_encrypt($userId, $actionType) {
$timestamp = time();
$checkCode = 'm66'; // Behobener Verifizierungscode
// Paketdaten in binäre Zeichenfolgen
$binaryData = pack("NNCa3", $userId, $timestamp, $actionType, $checkCode);
// verwenden base64 Codierung,Generieren Sie die letztendlich übertragbaren“Verschlüsselung”Saite
return base64_encode($binaryData);
}
Die Bedeutung der Formatzeichenfolge "NNCA3" lautet wie folgt:
N : 32-Bit unsigned Long Ganzzahl (BenutzerID)
N : 32-Bit nicht signiertes langes Muster (Zeitstempel)
C : 8-Bit nicht signierte Zeichen (ActionType)
A3 : 3-Byte-String (Checkcode)
Wir können es testen:
echo custom_encrypt(1024, 5);
Die Ausgabe ist eine verpackte und codierte Zeichenfolge, zum Beispiel:
AAAAAAgAAZ8ZziUAbTY2AA==
Wir können die verschlüsselten Daten auch durch pack () in den Originalinhalt zurücklösen:
function custom_decrypt($encoded) {
$binaryData = base64_decode($encoded);
$data = unpack("NuserId/Ntimestamp/CactionType/a3checkCode", $binaryData);
return $data;
}
Wie man verwendet:
$encoded = custom_encrypt(2048, 3);
$decoded = custom_decrypt($encoded);
print_r($decoded);
Die Ausgabe wird so etwas wie:
Array
(
[userId] => 2048
[timestamp] => 1716821234
[actionType] => 3
[checkCode] => m66
)
Da es sich um eine Basis 64-kodierte Zeichenfolge handelt, können wir sie sicher an die URL anhängen:
$url = "https://m66.net/api/receive.php?token=" . urlencode(custom_encrypt(2048, 1));
Gleiches gilt für die Empfängerentschlüsselung:
$token = $_GET['token'];
$data = custom_decrypt($token);
Pack () ist ein übersehenes, aber sehr leistungsfähiges Werkzeug in PHP. Es bietet uns eine präzise Kontrolle über die zugrunde liegenden Binärdaten. In einigen Szenarien, in denen eine leichte Verschlüsselung oder Dateneinkapselung erforderlich ist, können die Verwendung mit Base64_CODE () und pack () eine kundenspezifische Verschlüsselungsübertragungslogik erstellen.
Natürlich ist dieser Ansatz nicht für die Verarbeitung sensibler Informationen geeignet, sondern als leichte Codierungs-/Verschleierungschema als eine wirklich sichere Verschlüsselung geeignet. Wenn Sie sich mit Benutzerkennwörtern, Finanzdaten usw. befassen, wählen Sie Standard -Verschlüsselungsalgorithmen wie OpenSSL oder Libsodium.
Durch das Beherrschen der verschiedenen Formatierungssymbole von Pack () können Sie sogar den Verpackungsprozess von Netzwerkprotokollen simulieren und großartige Erfolge im benutzerdefinierten API -Design erzielen.