<?php Class DES { var $key; var $iv; Offset amount
function DES ($key, $iv = 0) { Key Length 8 For example: 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) { Encryption, returning uppercase hexadecimal strings $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) { Decrypt $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); }
} ?> Here is the test result: $str = ' 12345678 '; $key = ' 1234ABCD '; $crypt = new DES ($key); $mstr = $crypt->encrypt ($STR); $str = $crypt->decrypt ($MSTR); echo $str. ' <=> ' $mstr; |