Heim  >  Artikel  >  Backend-Entwicklung  >  Korrekter Nutzungsstatus der Verschlüsselung und Entschlüsselung DES in PHP

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

藏色散人
藏色散人nach vorne
2020-01-16 14:21:362834Durchsuche

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 );
    }
}

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;;

Wirkung

原字符是podsmia
加密后的字符是9490E64136137FD8
解密后的字符是podsmia

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);
    }
}

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;;

Effekt

原字符是问哪个
加密后的字符是074b8beee21eefca7ec3a60cb8edda18
解密后的字符是问哪个

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen