


Wie verwendet PHP Hexadezimalzahlen zum Ver- und Entschlüsseln von IDs (Code im Anhang)
Ich bin kürzlich auf ein Problem im Projekt gestoßen. Der aktuelle Benutzer teilt einen Einladungscode mit einem Freund. Nachdem sich der Freund als neuer Benutzer registriert hat, wird er unter bestimmten Bedingungen zum Untergebenen des aktuellen Benutzers , die Informationen des untergeordneten Benutzers können eine Reihe von Rabatten erhalten. Was hier implementiert wird, besteht darin, eine verschlüsselte Zeichenfolge basierend auf der ID des aktuellen Benutzers zu generieren, die umgekehrt entschlüsselt werden kann. Nach ständigen Tests und Anpassungen lag schließlich das Endergebnis vor. Zum Beispiel:
id = 12 code = 85U43DM
Erste Implementierung
Geben Sie zuerst den Code wie folgt ein:
/** * 加密解密用户邀请码, * @param unknown $string * @param string $action encode|decode * @return string */ function endecodeUserId($string, $action = 'encode') { $startLen = 13; $endLen = 8; $coderes = ''; #TOD 暂设定uid字符长度最大到9 if ($action=='encode') { $uidlen = strlen($string); $salt = 'yourself_code'; $codestr = $string.$salt; $encodestr = hash('md4', $codestr); $coderes = $uidlen.substr($encodestr, 5,$startLen-$uidlen).$string.substr($encodestr, -12,$endLen); $coderes = strtoupper($coderes); }elseif($action=='decode'){ $strlen = strlen($string); $uidlen = $string[0]; $coderes = substr($string, $startLen-$uidlen+1,$uidlen); } return $coderes; }
Einführung in die Idee:
Legen Sie einen Salt-Wert fest, $salt, und verketten Sie ihn mit der ID, um einen neuen String zu bilden Kalibrieren Sie den Einladungscode später sicher. Führen Sie eine MD4-Verschlüsselung für die Zeichenfolge durch (dabei ist MD4 schneller und weniger sicher als MD5), rufen Sie $encodestr ab und teilen Sie die Zeichenfolge in zwei Teile auf: den ersten Teil $startLen, 13 Zeichenfolgen, und den zweiten Teil $endLen, 8 Zeichenfolgen. Mischen Sie $string, hier die übergebene ID, und $uidlen in den vorherigen Teil des Strings. Daher unterstützt es derzeit nur eine maximale Länge der ID von 9, sodass die Länge von $uidlen 1 beträgt, sodass wir am Ende eine Zeichenfolge mit der Länge 22 erhalten.
Während des Verschlüsselungsprozesses mischen wir tatsächlich den Wert der ID und die Länge der ID in die verschlüsselte Zeichenfolge. Während der Verschlüsselung finden wir die entsprechende Position basierend auf den gespeicherten Informationen, um die ID zu erhalten.
Hier stellen wir keine hohen Anforderungen an die Sicherheit. Damit das Programm schneller läuft, erfolgt keine Überprüfung bei der Entschlüsselung.
Testen und verschlüsseln Sie die ID:
echo endecodeUserId(12);
Ausgabeergebnis:
23471DC2352712F34D6780
Testen und entschlüsseln Sie den Einladungscode
echo endecodeUserId('23471DC2352712F34D6780','decode');
Ausgabeergebnis :
12
Die erhaltenen Ergebnisse scheinen keine Probleme zu haben, aber im eigentlichen Test wurde ein solches Problem festgestellt, das für normale Benutzer bestehen könnte. Ein Freund hat es ihm geschickt WeChat-Handy. Einladungscode, und dann möchte er einen Computer verwenden, um sich zu registrieren, aber er weiß nicht, wie er den Einladungscode vom Mobiltelefon auf den Computer übertragen soll. Zu diesem Zeitpunkt muss er ihn eingeben Den Einladungscode manuell am Computer eingeben. Oh mein Gott. Er besteht aus 22 Ziffern und ist immer noch eine Mischung aus Großbuchstaben und Zahlen. Auf die Registrierung muss er wahrscheinlich verzichten.
Daher haben wir Anpassungen vorgenommen und ihn auf einen 7-stelligen Einladungscode umgestellt.
Erneut erkunden
Ist die Methode vor dem Schreiben des Artikels gekapselt oder ist es besser, sie zuerst direkt zu codieren
<?php class convert { /** * 初始数字,自定义 */ const INIT_NUM = 123456789; /** * @var 进制的基本字符串 */ private $baseChar; /** * @var 进制类型 */ private $type; /** * @var array 各进制字符串列表 */ private static $convertList = array( '32' => '0123456789ABCDEFGHJKMNPQRSTVWXYZ',//不含ILOU ); public function __construct($type='32') { $this->type = $type; $this->baseChar = self::$convertList[$type]; } /** * 公用方法,数字进行进制转换 * @param $num * @return string */ private function _idToString($num){ $str = ''; while ($num!=0){ $tmp = $num % $this->type; $str .= $this->baseChar[$tmp]; $num = intval($num/$this->type); } return $str; } /** * @desc im:十机制数转换成三十二进制数 * @param (string)$char 三十二进制数 * return 返回:十进制数 */ public function idToString($id){//10位内id 返回7位字母数字 //数组 增加备用数值 $id += self::INIT_NUM; //左补0 补齐10位 $str = str_pad($id,10,'0',STR_PAD_LEFT); //按位 拆分 4 6位(32进制 4 6位划分) $num1 = intval($str[0].$str[2].$str[6].$str[9]); $num2 = intval($str[1].$str[3].$str[4].$str[5].$str[7].$str[8]); $str1 = $str2 = ''; $str1 = $this->_idToString($num1); $str1 = strrev($str1); $str2 = $this->_idToString($num2); $str2 = strrev($str2); //4 补足 3 4位 U L return str_pad($str1,3,'U',STR_PAD_RIGHT).str_pad($str2,4,'L',STR_PAD_RIGHT); } /** * @desc im:三十二进制数转换成十机制数 * @param (string)$char 三十二进制数 * return 返回:十进制数 */ public function stringToId($str){ //1 清除 3 4 位补足位 $str1 = trim(substr($str,0,3),'U'); $str2 = trim(substr($str,3,4),'L'); $num1 = $this->_stringToId($str1); $num2 = $this->_stringToId($str2); //补位拼接 $str1 = str_pad($num1,4,'0',STR_PAD_LEFT); $str2 = str_pad($num2,6,'0',STR_PAD_LEFT); $id = ltrim($str1[0].$str2[0].$str1[1].$str2[1].$str2[2].$str2[3].$str1[2].$str2[4].$str2[5].$str1[3],'0'); //减去 备用数值 $id -= self::INIT_NUM; return $id; } /** * 公用方法字符串转数字 * @param $str * @return float|int|string */ private function _stringToId($str){ //转换为数组 $charArr = array_flip(str_split($this->baseChar)); $num = 0; for ($i=0;$i<=strlen($str)-1;$i++) { $linshi = substr($str,$i,1); if(!isset($charArr[$linshi])){ return ''; } $num += $charArr[$linshi]*pow($this->type,strlen($str)-$i-1); } return $num; } }
Einführung in die Idee
Unter der Anleitung eines seit vielen Jahren tätigen Meisters wurde diese Methode übernommen. Wandeln Sie die ID in eine 32-stellige Zeichenfolge fester Länge um und fügen Sie Ihren eigenen Algorithmus hinzu. Warum wird hier die Basis 32 anstelle anderer Basen verwendet? Das 32-Bit-System kann genügend englische Zeichen enthalten und die generierte verschlüsselte Zeichenfolge sieht standardisierter aus. Andererseits werden einige englische Zeichen, die nicht leicht zu identifizieren sind, ausgeschlossen (ILOU ist hier ausgeschlossen), also das 32-Bit-System wird anstelle von 36 Base verwendet.
Verschlüsselungsprozess, Methode idToString(). Wenn die ID am Anfang relativ klein ist, gibt es bei der Konvertierung in 32 Hexadezimalzahlen mehr Nullen, was sehr unregelmäßig erscheint, sodass ein Anfangswert INIT_NUM festgelegt wird. , dies kann angepasst werden. Entsprechend der übergebenen ID erhält man nach Addition des Anfangswertes einen Wert mit einer Länge von 10 Ziffern. Das Intervallbit dieses Wertes wird in $num1 mit einer Länge von 4 Ziffern und $num2 mit einer Länge von 6 Ziffern aufgeteilt. Die beiden Werte werden separat konvertiert. Nach der Konvertierung erhält $num1 eine Zeichenfolge mit der Länge 3. Verwenden Sie U, um den Mangel auszugleichen L, um den Mangel auszugleichen.
Die Entschlüsselung ist ein umgekehrter Vorgang. Kehren Sie einfach den Vorgang um.
Test: Generieren
$obj = new convert(32); $res1 = $obj->idToString(12);
Ergebnis:
85U43DM
Entschlüsseln:
$obj = new convert(32); $res1 = $obj->stringToId('85U43DM');
Ergebnis:
12
Empfohlene verwandte Artikel:
Zusammenfassung von vier Sicherheitsfilterfunktionen in PHP (mit Code)
PHP implementiert die Extraktion von Zahlen aus Zeichenfolgen. Zusammenfassung von Methoden (Code)
Einfache Analyse von PHP-Systemprogrammausführungsfunktionen (System, Durchgang, Exec) (mit Code)
Das obige ist der detaillierte Inhalt vonWie verwendet PHP Hexadezimalzahlen zum Ver- und Entschlüsseln von IDs (Code im Anhang). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.
