Heim Backend-Entwicklung PHP-Tutorial Wie verwendet PHP Hexadezimalzahlen zum Ver- und Entschlüsseln von IDs (Code im Anhang)

Wie verwendet PHP Hexadezimalzahlen zum Ver- und Entschlüsseln von IDs (Code im Anhang)

Aug 03, 2018 pm 02:04 PM
php

Dieser Artikel stellt Ihnen vor, wie Sie PHP zum Verschlüsseln und Entschlüsseln von IDs mithilfe von Hexadezimalzahl 32 verwenden. Ich hoffe, dass er Ihnen als Referenz dienen wird.

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;
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

Ausgabeergebnis:

23471DC2352712F34D6780

Testen und entschlüsseln Sie den Einladungscode

 echo endecodeUserId('23471DC2352712F34D6780','decode');
Nach dem Login kopieren

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(
        &#39;32&#39; => '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 &#39;&#39;;
            }
            $num += $charArr[$linshi]*pow($this->type,strlen($str)-$i-1);
        }

        return $num;
    }
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

Ergebnis:

85U43DM

Entschlüsseln:

$obj = new convert(32);
$res1 = $obj->stringToId('85U43DM');
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

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.

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

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

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

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

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

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.

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

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

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

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

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

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 PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

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.

See all articles