最近用PHP写的一个DES加密算法
1. example.php
<?php include 'Des.class.php'; $str = "aabcdefqrssdfsdfsdfsdfsdfasreguiowefisdfsdfsdfhldfsnasdhfuit"; $Des = new Des('12345678'); $encode = $Des->encode($str); echo "<br/>Des加密结果:<br/>"; echo $encode; $decode = $Des->decode($encode); echo "<br/>Des解密结果:<br/>"; echo $decode; $TripleDes = new TripleDes('12345678','abcdefgh'); $encode = $TripleDes->encode($str); echo "<br/>3Des加密结果:<br/>"; echo $encode; $decode = $TripleDes->decode($encode); echo "<br/>3Des解密结果:<br/>"; echo $decode; ?>
2. TripleDes.class.php
<?php /** * TripleDes 三次Des加密 * @author CuZn * @last-modified 2013-4-18 */ class TripleDes { private $DesArr = array(); public function __construct($key1, $key2) { $this->DesArr[] = new Des($key1); $this->DesArr[] = new Des($key2); } public function encode($content) { return $this->DesArr[0]->encode( $this->DesArr[1]->decode( $this->DesArr[0]->encode($content) ) ); } public function decode($content) { return $this->DesArr[0]->decode( $this->DesArr[1]->encode( $this->DesArr[0]->decode($content) ) ); } } ?>
3.Des.class.php
<?php /** * Des 主要操作类 * @author CuZn * @last-modified 2013-4-18 */ //加载分组密钥类和辅助函数 include 'DesKey.class.php'; include 'TripleDes.class.php'; include 'toolFunction.php'; class Des { private $DesKey; //DesKey分组密钥对象 private $contentAdd = 'a'; //文字不足时的添加 private $permutationETable = array(//置换表E 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1 ); private $permutationPTable = array(//置换表P 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25 ); private $sBox = array(//S盒子 array( 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 ), array( 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 ), array( 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 ), array( 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 ), array( 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, 14, 11, 2, 12, 4, 7, 15, 1, 5, 0, 15, 10, 3, 9, 8, 6, 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 ), array( 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 ), array( 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 ), array( 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 ) ); public function __construct($key) { $this->DesKey = new DesKey($key); } public function encode($content) { return $this->authCode($content , 'encode' ); } public function decode($content) { return $this->authCode($content , 'decode'); } /** * 加密的启动函数 * @param string $type 加密类型 * @param type $content 加密内容 * @return type 加密结果 */ public function authCode( $content , $type = 'encode') { if ($type != 'encode') { $type = 'decode'; } $contentEncodeArr = array(); $contentArr = str_split($content, 8); $encodeContent = ''; for ($index = 0; $index < count($contentArr); $index++) { $content = $contentArr[$index]; if (strlen($content) < 8) { $content .= str_repeat($this->contentAdd, ( 8 - strlen($content))); } $contentBitArr = bytesToBitArr($content); list($L, $R) = array_chunk($contentBitArr, 32); $contentEncodeArr = $this->_run($L, $R, $type); $byteArr = array_chunk($contentEncodeArr, 8); for ($index1 = 0; $index1 < count($byteArr); $index1++) { $byte = 0; for ($i = 0; $i < count($byteArr[$index1]); $i++) { $byte += $byteArr[$index1][$i] * pow(2, 7 - $i); } $encodeContent .= chr($byte); } } return $encodeContent; } /** * Feistel 结构加密算法中的迭代函数 * @param type $L 32位的左半部分输入 * @param type $R 32位的右半部分输入 * @param type $method encode(加密)或decode(解密) * @param type $round 迭代的轮数 * @return type */ private function _run($L, $R, $method = "encode", $round = 0) { $nextL = ''; //下轮左半部分输入 $nextR = ''; //下轮右半部分输入 $subKey48Bit = $this->DesKey->getSubKeyAt($round, $method); //子密钥 $FResult32Bit = $this->_F($subKey48Bit, $R); //轮函数结果 //异或 for ($index = 0; $index < count($FResult32Bit); $index++) { $FResult32Bit[$index] = $FResult32Bit[$index] === $L[$index] ? false : true; } $nextL = $R; $nextR = $FResult32Bit; //轮数将会停在15,共加密16轮 if ($round >= 15) { return array_merge($nextR, $nextL); } else { return $this->_run($nextL, $nextR, $method, ++$round); } } /** * Feitel架构中的轮函数 * @param type $subKey48Bit 48位的子密钥 * @param type $R 当前轮的右部分输入 * @return 32位结果 */ public function _F($subKey48Bit, $R) { $tmp48Bit = array(); //E表置换 for ($index = 0; $index < count($this->permutationETable); $index++) { $tmp48Bit[] = $R[$this->permutationETable[$index] - 1]; } //与子密钥异或 for ($index = 0; $index < count($tmp48Bit); $index++) { $tmp48Bit[$index] = $tmp48Bit[$index] === $subKey48Bit[$index] ? false : true; } //代替/选择(s盒) $tem32Bit = array(); $tem6BitArr = array_chunk($tmp48Bit, 6); for ($index = 0; $index < count($tem6BitArr); $index++) { $tem6Bit = $tem6BitArr[$index]; $line = $tem6Bit[0] * 2 + $tem6Bit[5] * 1; $field = $tem6Bit[1] * 2 * 2 * 2 + $tem6Bit[2] * 2 * 2 + $tem6Bit[3] * 2 + $tem6Bit[4]; $selectPos = $line * 6 + $field; $select = $this->sBox[$index][$selectPos]; if ($select >= 8) { $tem32Bit[] = true; } else { $tem32Bit[] = false; } $select %= 8; if ($select >= 4) { $tem32Bit[] = true; } else { $tem32Bit[] = false; } $select %= 4; if ($select >= 2) { $tem32Bit[] = true; } else { $tem32Bit[] = false; } $select %=2; if ($select >= 1) { $tem32Bit[] = true; } else { $tem32Bit[] = false; } } //置换P $FResult32Bit = array(); for ($index = 0; $index < count($this->permutationPTable); $index++) { $FResult32Bit[] = $tem32Bit[$this->permutationPTable[$index] - 1]; } return $FResult32Bit; } }
4. DesKey.class.php
<?php /** * Des 生成加密分组密钥 * @author CuZn * @last-modified 2013-4-18 */ class DesKey { private $key = ''; private $subKeyArr = array(); private $keyAdd = 'a'; private $CkeyArr = array(); private $dkeyArr = array(); private $leftShiftArr = array(1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1); private $permutationTable = array( 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 13, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 ); //置换表 public function __construct($key) { $this->_initKey($key); $this->_generateSubKey(); } /** * 获取指定位置的子密钥 * @param type $index 位置 * @param type $method 决定是正序还是逆序 * @return type 48bit的子密钥 */ public function getSubKeyAt($index, $method = 'encode') { if ($method == 'encode') { return $this->subKeyArr[$index]; } else { return $this->subKeyArr[15 - $index]; } } /** * 初始化64位的密钥 * @param type $key 字符密钥 */ private function _initKey($key) { $key = substr($key, 0, 8); $keyLen = strlen($key); //补全64位 if ($keyLen < 8) { $key .= str_repeat($this->keyAdd, 8 - $keyLen); } $this->key = $key; $bitArr = bytesToBitArr($this->key); //初始化C0,左边取28位 for ($index = 0; $index < 32; $index++) { if ($index % 8 === 7) { continue; } $this->CkeyArr[] = $bitArr[$index]; } //初始化D0,右边取28位 for ($index = 32; $index < 64; $index++) { if ($index % 8 === 7) { continue; } $this->DkeyArr[] = $bitArr[$index]; } } /** * 16轮生成16个子密钥 * @param type $round 当前轮数 */ private function _generateSubKey($round = 0) { //左移 $tmp28BitC = array_shift($this->CkeyArr); $tmp28BitD = array_shift($this->DkeyArr); $this->CkeyArr[] = $tmp28BitC; $this->DkeyArr[] = $tmp28BitD; //是否继续左移 if ($this->leftShiftArr[$round] == 2) { $tmp28BitC = array_shift($this->CkeyArr); $tmp28BitD = array_shift($this->DkeyArr); $this->CkeyArr[] = $tmp28BitC; $this->DkeyArr[] = $tmp28BitD; } $tem56BitCDkey = array_merge($this->CkeyArr, $this->DkeyArr); $tem48BitSubkey = array(); //置换&压缩 for ($index = 0; $index < count($this->permutationTable); $index++) { $tem48BitSubkey[] = $tem56BitCDkey[$this->permutationTable[$index] - 1]; } $this->subKeyArr[] = $tem48BitSubkey; if ($round < 15) { $this->_generateSubKey(++$round); } } }
5. toolFunction.php
<?php /** * 将字节流转换成数组 * @param type $bytes * @return boolean 数组 */ function bytesToBitArr($bytes) { $boolArr = array(); for ($i = 0; $i < strlen($bytes); $i++) { $byte = substr($bytes, $i, 1); for ($index = 0; $index < 8; $index++) { if (((ord($byte) << $index) % 256) >= 128) { $boolArr[] = true; } else { $boolArr[] = false; } } } return $boolArr; } /** * 测试用 * @param type $bitArr */ function dumpBit($bitArr) { for ($index = 0; $index < count($bitArr); $index++) { if ($bitArr[$index]) { echo '1'; } else { echo '0'; } } echo '<br />'; } /** * 测试用 * @param type $num * @param type $str */ function testDesTime($num = 100, $str = '测试测试') { $startPoint = microtimeFloat(); for ($index = 0; $index < $num; $index++) { $Des = new Des('12345678'); $encode = $Des->encode($str); } $endPoint = microtimeFloat(); $allTime = $endPoint - $startPoint; return $allTime; } /** * 测试用 * @param type $num * @param type $str */ function testMd5Time($num = 100, $str = '测试测试') { $startPoint = microtimeFloat(); for ($index = 0; $index < $num; $index++) { $encode = md5($str); } $endPoint = microtimeFloat(); $allTime = $endPoint - $startPoint; return $allTime; } /** * 测试用 * @param type $num * @param type $str */ function microtimeFloat() { list($usec, $sec) = explode(" ", microtime()); return ((float) $usec + (float) $sec); }

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Avec le développement continu de la technologie réseau, les applications Web deviennent de plus en plus populaires et la sécurité des informations dans les applications Web devient de plus en plus importante. Afin de résoudre le problème de la sécurité des informations dans les applications Web, de nombreux algorithmes de cryptage ont été développés, dont les plus connus sont RSA, DES et d'autres algorithmes. Cependant, étant donné que le décryptage des algorithmes de chiffrement nécessite beaucoup de calculs et de temps, ce qui entraînera une charge système importante, un type d'algorithme de chiffrement capable de chiffrer et de décrypter rapidement en peu de temps est apparu, à savoir un algorithme de chiffrement à grande vitesse. Cet article présentera les fonctions de haut niveau en PHP

Dans le domaine de la sécurité des réseaux, la technologie de cryptage est un moyen technique très important permettant de crypter et de décrypter les données afin d'assurer la sécurité des données. En tant que langage de programmation côté serveur populaire, PHP prend également en charge le cryptage symétrique et asymétrique pour répondre aux besoins de différents scénarios d'application. Chiffrement symétrique Le chiffrement symétrique fait référence à une méthode de chiffrement qui utilise la même clé pour le chiffrement et le déchiffrement. Il existe de nombreux algorithmes de chiffrement symétriques, tels que DES, 3DES, AES, etc. En PHP, cela peut être réalisé en utilisant les fonctions fournies par la bibliothèque d'extensions mcrypt

Comment écrire un algorithme de chiffrement RSA en utilisant Python ? Introduction : RSA est un algorithme de chiffrement asymétrique largement utilisé dans le domaine de la sécurité de l'information. Dans les communications modernes, l'algorithme de chiffrement RSA est couramment utilisé pour chiffrer et déchiffrer les données sensibles. Cet article explique comment utiliser Python pour écrire l'algorithme de chiffrement RSA et fournit des exemples de code spécifiques. Installez la bibliothèque Python Avant de commencer à écrire l'algorithme de chiffrement RSA, vous devez installer la bibliothèque de chiffrement Python. Il peut être installé à l'aide de la commande suivante : pipinstallrsa generate

Les algorithmes de chiffrement PHP incluent l'algorithme MD5, l'algorithme SHA, l'algorithme AES, l'algorithme RSA, l'encodage Base64, l'algorithme DES, l'algorithme RC4, l'algorithme Blowfish, etc. Introduction détaillée : 1. Algorithme MD5, utilisé pour convertir des données de n'importe quelle longueur en une valeur de hachage de longueur fixe. En PHP, vous pouvez utiliser la fonction md5() pour calculer la valeur de hachage MD5 d'une chaîne. 2. Algorithme SHA, y compris ; SHA -1. SHA-256, SHA-512, etc. Ces algorithmes ont des fonctions correspondantes en PHP 3. Algorithme AES, etc.

Comment utiliser un algorithme de cryptage pour protéger les données des utilisateurs du site Web PHP ? Avec le développement rapide d’Internet, la protection des données des utilisateurs des sites Internet est devenue de plus en plus importante. Dans le développement PHP, nous pouvons utiliser des algorithmes de cryptage pour protéger la sécurité des données des utilisateurs. Cet article présentera certains algorithmes de cryptage couramment utilisés et comment les utiliser dans les sites Web PHP pour crypter les données des utilisateurs. 1. Sélection des algorithmes de cryptage Pour les sites Web PHP, nous pouvons choisir les algorithmes de cryptage suivants couramment utilisés pour protéger la sécurité des données des utilisateurs : 1. Algorithme de cryptage symétrique : Cet algorithme utilise le même algorithme de cryptage.

Avec le développement vigoureux de la technologie Internet, la sécurité des réseaux est devenue aujourd’hui l’un des facteurs importants du développement de l’informatisation mondiale. Avec l’apparition continue de cyberattaques et de cybercrimes, la protection de la sécurité des réseaux est devenue pour nous un choix inévitable. Cet article se concentrera sur l’historique du développement de la technologie de sécurité des réseaux. 1. L'ère de la cryptozoologie (années 1960-1980) La technologie de sécurité des réseaux à l'ère de la cryptographie a été principalement développée sur la base d'idées cryptographiques. À cette époque, l'ordinateur n'était qu'une énorme machine et l'utilisation d'Internet n'était pas aussi répandue qu'aujourd'hui, si limitée

Avec le développement d’Internet, la sécurité des données est devenue une question sérieuse à laquelle nous devons prêter attention dans notre travail quotidien. Le cryptage devient particulièrement important lorsqu'il s'agit d'informations personnelles sensibles ou de données professionnelles. Dans le développement PHP, certains algorithmes de chiffrement sont largement utilisés. Jetons un coup d'œil aux algorithmes de chiffrement couramment utilisés en PHP. 1. Encodage Base64 L'encodage Base64 est souvent utilisé pour transmettre des données binaires dans des pages Web ou des e-mails, car les pages Web ou les e-mails ne peuvent transmettre que des données de type chaîne et ne peuvent pas transmettre directement des données binaires. Base64 est une solution

Dans le développement Web, la sécurité a toujours été l’une des questions les plus importantes. Les risques tels que la fuite de clés, la falsification de données et le vol sont toujours présents, la protection de la sécurité des données est donc particulièrement importante. Afin de garantir la sécurité des données, nous utilisons généralement le cryptage et le décryptage pour le traitement des données. En PHP, le cryptage et le déchiffrement sont également des éléments très importants. 1. Méthodes de cryptage en PHP En PHP, il existe de nombreuses méthodes de cryptage. Nous présenterons ci-dessous plusieurs méthodes de cryptage couramment utilisées. Cryptage md5 md5 est une méthode de cryptage couramment utilisée. il
