Korrekter Nutzungsstatus der Verschlüsselung und Entschlüsselung DES in PHP

藏色散人
Freigeben: 2023-04-08 08:36:01
nach vorne
2867 Leute haben es durchsucht

Vorwort: In der täglichen Entwicklung verschlüsseln wir häufig Schlüsselzeichen, entweder aus Sicherheitsgründen oder zur Standardisierung. Heute erfahren Sie mehr über die korrekte Verwendung der DES-Verschlüsselung

Aufgabenflussdiagramm

Korrekter Nutzungsstatus der Verschlüsselung und Entschlüsselung DES in PHP

Fragment 1

Mach es einfach, ich habe wie folgt angefangen, den Verschlüsselungscode zu schreiben

class DES
{
    var $key;
    var $iv; //偏移量
 
    function DES( $key, $iv=0 ) {
        //key长度8例如:1234abcd
        $this->key = $key;
        if( $iv == 0 ) {
            $this->iv = $key;
        } else {
            $this->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );
        }
    }
 
    function encrypt($str) {
        //加密,返回大写十六进制字符串
        $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );
        $str = $this->pkcs5Pad ( $str, $size );
        return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) );
    }
 
    function decrypt($str) {
        //解密
        $strBin = $this->hex2bin( strtolower( $str ) );
        $str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv );
        $str = $this->pkcs5Unpad( $str );
        return $str;
    }
 
    function hex2bin($hexData) {
        $binData = "";
        for($i = 0; $i < strlen ( $hexData ); $i += 2) {
            $binData .= chr ( hexdec ( substr ( $hexData, $i, 2 ) ) );
        }
        return $binData;
    }
 
    function pkcs5Pad($text, $blocksize) {
        $pad = $blocksize - (strlen ( $text ) % $blocksize);
        return $text . str_repeat ( chr ( $pad ), $pad );
    }
 
    function pkcs5Unpad($text) {
        $pad = ord ( $text {strlen ( $text ) - 1} );
        if ($pad > strlen ( $text ))
            return false;
        if (strspn ( $text, chr ( $pad ), strlen ( $text ) - $pad ) != $pad)
            return false;
        return substr ( $text, 0, - 1 * $pad );
    }
}
Nach dem Login kopieren

Testcode

<?php
header("Content-type: text/html; charset=utf-8");
error_reporting(0);
require "DES5.php";
// 秘钥
$key = &#39;MOxinrui&#39;;
$crypt = new DES5($key);
$str = &#39;podsmia&#39;;
echo "原字符是".$str.&#39;<br>&#39;;
$encrypt_str = $crypt->encrypt($str);
echo "加密后的字符是".$encrypt_str.&#39;<br>&#39;;
$decrypt_str= $crypt->decrypt($encrypt_str);
echo "解密后的字符是".$decrypt_str.&#39;<br>&#39;;
Nach dem Login kopieren

Wirkung

原字符是podsmia
加密后的字符是9490E64136137FD8
解密后的字符是podsmia
Nach dem Login kopieren

Nach ein paar Tagen hatte ich nichts mehr zu tun, mach weiter Führen Sie den Code aus

Veraltet: Methoden mit demselben Namen wie ihre Klasse werden in einer zukünftigen Version von PHP keine Konstruktoren mehr sein; DES5 hat einen veralteten Konstruktor in D:phpstudy_proWWWdesDES5.php in Zeile 2

Das ursprüngliche Zeichen ist podsmia

Schwerwiegender Fehler: Nicht erfasster Fehler: Aufruf der undefinierten Funktion mcrypt_get_block_size() in D:phpstudy_proWWWdesDES5.php:19 Stack-Trace: #0 D:phpstudy_proWWWdes1 . php(10): DES5->encrypt('podsmia') #1 {main} geworfen in D:phpstudy_proWWWdesDES5.php in Zeile 19

hat mir einen fatalen Fehler gemeldet Ich bewege nichts. Was ist los? Nach einiger Recherche später. Es wurde festgestellt, dass es sich um ein Problem mit der PHP-Version handelte. Ich habe es zuvor erfolgreich ausgeführt, weil ich PHP5.5 verwendet habe, aber dieses Mal bekam ich eine Fehlermeldung und ich habe PHP7.2 verwendet. Dann muss ich eine Alternative finden. . Schauen Sie mir als Nächstes zu, wie ich

Fragment 2

<?php
class DES7
{
    //要改的加密
    public function desEncrypt($str,$key) {
        $iv = $key;
        $data = openssl_encrypt($str,"DES-CBC",$key,OPENSSL_RAW_DATA,$iv);
        $data = strtolower(bin2hex($data));
        return $data;
    }
 
    //要改的解密
    public function desDecrypt($str,$key) {
        $iv = $key;
        return openssl_decrypt (hex2bin($str), &#39;DES-CBC&#39;, $key, OPENSSL_RAW_DATA,$iv);
    }
}
Nach dem Login kopieren

Testcode

<?php
header("Content-type: text/html; charset=utf-8");
//error_reporting(0);
// 秘钥
require "DES7.php";
$key = &#39;MOxinrui&#39;;
$crypt = new DES7($key);
$str = &#39;问哪个&#39;;
echo "原字符是".$str.&#39;<br>&#39;;
$encrypt_str = $crypt->desEncrypt($str,$key);
echo "加密后的字符是".$encrypt_str.&#39;<br>&#39;;
$decrypt_str= $crypt->desDecrypt($encrypt_str,$key);
echo "解密后的字符是".$decrypt_str.&#39;<br>&#39;;
Nach dem Login kopieren

Effekt

原字符是问哪个
加密后的字符是074b8beee21eefca7ec3a60cb8edda18
解密后的字符是问哪个
Nach dem Login kopieren

Problem perfekt gelöst. Wenn Sie in Zukunft auf ein solches Problem stoßen, können Sie einfach meinen Code kopieren, was praktisch und problemlos ist.

Weitere PHP-Kenntnisse finden Sie im

PHP-Tutorial!

Das obige ist der detaillierte Inhalt vonKorrekter Nutzungsstatus der Verschlüsselung und Entschlüsselung DES in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:csdn.net
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage