Heim  >  Artikel  >  Backend-Entwicklung  >  Einfache Implementierung eines symmetrischen Verschlüsselungsalgorithmus in PHP

Einfache Implementierung eines symmetrischen Verschlüsselungsalgorithmus in PHP

高洛峰
高洛峰Original
2017-01-07 16:37:251132Durchsuche

Vorwort

Ich habe im Internet einen guten symmetrischen Verschlüsselungsalgorithmus für PHP gefunden. In der PHP-Syntaxumgebung gibt es symmetrische Algorithmen, die mit urlencode und urldecode, base64_encode und base64_decode geliefert werden, aber diese kommen mit dem Algorithmus kann nicht als Verschlüsselungsalgorithmus, sondern nur als Kodierungsmethode bezeichnet werden. Aber wir können diese verwenden, um einige Verarbeitungsschritte durchzuführen und einfache Verschlüsselungs- und Entschlüsselungsalgorithmen zu implementieren.

Diesmal werden die Ver- und Entschlüsselungsalgorithmen mithilfe von base64 angepasst. Normalerweise verwenden wir den von base64_encode($str) generierten String. Ohne jegliche Verarbeitung kann base64_decode() in unseren vorherigen String zurückkonvertiert werden. Was passiert jedoch, wenn wir nach base64_encode() ein paar Zeichen in den String einfügen? zurück, und selbst wenn es umgedreht wird, ist es nicht unsere eigene Saite.

Der Beispielcode lautet wie folgt:

<?php
$content = "大家好,我是中国人,你是谁";
 
/**
* 简单对称加密算法之加密
* @param String $string 需要加密的字串
* @param String $skey 加密EKY
* @return String
*/
function encode($string = &#39;&#39;, $skey = &#39;wenzi&#39;) {
$strArr = str_split(base64_encode($string));
$strCount = count($strArr);
foreach (str_split($skey) as $key => $value)
 $key < $strCount && $strArr[$key].=$value;
return str_replace(array(&#39;=&#39;, &#39;+&#39;, &#39;/&#39;), array(&#39;O0O0O&#39;, &#39;o000o&#39;, &#39;oo00o&#39;), join(&#39;&#39;, $strArr));
}
 
/**
* 简单对称加密算法之解密
* @param String $string 需要解密的字串
* @param String $skey 解密KEY
* @return String
*/
function decode($string = &#39;&#39;, $skey = &#39;wenzi&#39;) {
$strArr = str_split(str_replace(array(&#39;O0O0O&#39;, &#39;o000o&#39;, &#39;oo00o&#39;), array(&#39;=&#39;, &#39;+&#39;, &#39;/&#39;), $string), 2);
$strCount = count($strArr);
foreach (str_split($skey) as $key => $value)
 $key <= $strCount && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0];
return base64_decode(join(&#39;&#39;, $strArr));
}
 
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
echo "string : " . $content . " <br />";
echo "encode : " . ($enstring = encode($content)) . &#39;<br />&#39;;
echo "decode : " . decode($enstring);
 
exit();

Im obigen Algorithmus können wir sehen: Wir fügen den Schlüssel, den wir im Voraus festgelegt haben, in die von base64_encode() generierten Zeichen ein und dann Special Zeichen werden ersetzt, auch wenn andere eine solche Zeichenfolge sehen, wissen sie nicht, was es ist. Natürlich können wir hier geringfügige Verbesserungen vornehmen, z. B. den Schlüssel rückwärts in die Zeichenfolge einfügen, den Schlüssel mit Base64 versehen und ihn dann einfügen usw., den Schlüssel einfügen und ihn dann erneut mit Base64 versehen.

Natürlich ist die Entschlüsselung die entgegengesetzte Richtung der Verschlüsselung. Nachdem ich eine Weile nachgedacht hatte, wurde mir das Prinzip der Entschlüsselung klar: Bevor wir einige Zeichen in die Zeichenfolge eingefügt haben, müssen wir sie jetzt beim Entschlüsseln entfernen Gruppieren Sie zunächst die verschlüsselten Zeichenfolgen in jedem Array und bestimmen Sie dann, ob das zweite Zeichen im Schlüssel enthalten ist. Wenn ja, dann ist das erste Zeichen das Zeichen im ursprünglichen Base64.

Zusammenfassung

Das Obige ist der gesamte Inhalt dieses Artikels. Natürlich gibt es in PHP auch Algorithmen wie AES und DES Achten Sie auf Script House, ich glaube, es wird für alle hilfreich sein.

Weitere Artikel zur Implementierung einfacher symmetrischer Verschlüsselungsalgorithmen in PHP finden Sie auf der chinesischen PHP-Website!


Stellungnahme:
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