⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blowfish.php

📁 架設ROSE私服必備之物 ROSE數據庫
💻 PHP
📖 第 1 页 / 共 2 页
字号:
            0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,            0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,            0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,            0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,            0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,            0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,            0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,            0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,            0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,            0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,            0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6);    /* The number of rounds to do */    var $_rounds = 16;    /* Constructor */    function Cipher_blowfish($params = null)    {    }    /**     * Set the key to be used for en/decryption     *     * @param String $key   The key to use     */    function setKey($key)    {        $key = $this->_formatKey($key);        $keyPos = $keyXor = 0;        $iMax = count($this->p);        $keyLen = count($key);        for ($i = 0; $i < $iMax; $i++) {            for ($t = 0; $t < 4; $t++) {                $keyXor = ($keyXor << 8) | (($key[$keyPos]) & 0x0ff);                if (++$keyPos == $keyLen) {                    $keyPos = 0;                }            }            $this->p[$i] = $this->p[$i] ^ $keyXor;        }        $encZero = array('L' => 0, 'R' => 0);        for ($i = 0; $i + 1 < $iMax; $i += 2) {          $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);          $this->p[$i] = $encZero['L'];          $this->p[$i + 1] = $encZero['R'];        }        $iMax = count($this->s1);        for ($i = 0; $i < $iMax; $i += 2) {          $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);          $this->s1[$i] = $encZero['L'];          $this->s1[$i + 1] = $encZero['R'];        }        $iMax = count($this->s2);        for ($i = 0; $i < $iMax; $i += 2) {          $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);          $this->s2[$i] = $encZero['L'];          $this->s2[$i + 1] = $encZero['R'];        }        $iMax = count($this->s3);        for ($i = 0; $i < $iMax; $i += 2) {          $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);          $this->s3[$i] = $encZero['L'];          $this->s3[$i + 1] = $encZero['R'];        }        $iMax = count($this->s4);        for ($i = 0; $i < $iMax; $i += 2) {          $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);          $this->s4[$i] = $encZero['L'];          $this->s4[$i + 1] = $encZero['R'];        }    }    /**     * Return the size of the blocks that this cipher needs     *     * @return Integer  The number of characters per block     */    function getBlockSize()    {        return 8;    }    /**     * Encrypt a block on data.     *     * @param String $block         The data to encrypt     * @param optional String $key  The key to use     *     * @return String the encrypted output     */    function encryptBlock($block, $key = null)    {        if (!is_null($key)) {            $this->setKey($key);        }        list($L, $R) = array_values(unpack('N*', $block));        $parts = $this->_encryptBlock($L, $R);        return pack("NN", $parts['L'], $parts['R']);    }        /**     * Encrypt a block on data.     *     * @param String $L  The data to encrypt.     * @param String $R  The data to encrypt.     *     * @return String  The encrypted output.     */    function _encryptBlock($L, $R)    {        $L ^= $this->p[0];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[1];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[2];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[3];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[4];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[5];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[6];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[7];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[8];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[9];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[10];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[11];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[12];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[13];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[14];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[15];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[16];        $R ^= $this->p[17];        return array('L' => $R, 'R' => $L);    }    /**     * Decrypt a block on data.     *     * @param String $block         The data to decrypt     * @param optional String $key  The key to use     *     * @return String the decrypted output     */    function decryptBlock($block, $key = null)    {        if (!is_null($key)) {            $this->setKey($key);        }// change for phpMyAdmin        $L = null;        $R = null;        $retarray = array_values(unpack('N*', $block));        if (isset($retarray[0])) {            $L = $retarray[0];        }        if (isset($retarray[1])) {            $R = $retarray[1];        }// end change for phpMyAdmin        $L ^= $this->p[17];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[16];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[15];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[14];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[13];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[12];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[11];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[10];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[9];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[8];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[7];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[6];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[5];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[4];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[3];        $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[2];        $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[1];        $decrypted = pack("NN", $R ^ $this->p[0], $L);        return $decrypted;    }    /**     * Converts a text key into an array.     *     * @return array  The key.     */    function _formatKey($key)    {        return array_values(unpack('C*', $key));    }}// higher-level functions:/** * String padding * * @param   string  input string * @param   integer length of the result * @param   string  the filling string * @param   integer padding mode * * @return  string  the padded string * * @access  public */function full_str_pad($input, $pad_length, $pad_string = '', $pad_type = 0) {    $str = '';    $length = $pad_length - strlen($input);    if ($length > 0) { // str_repeat doesn't like negatives        if ($pad_type == STR_PAD_RIGHT) { // STR_PAD_RIGHT == 1            $str = $input.str_repeat($pad_string, $length);        } elseif ($pad_type == STR_PAD_BOTH) { // STR_PAD_BOTH == 2            $str = str_repeat($pad_string, floor($length/2));            $str .= $input;            $str .= str_repeat($pad_string, ceil($length/2));        } else { // defaults to STR_PAD_LEFT == 0            $str = str_repeat($pad_string, $length).$input;        }    } else { // if $length is negative or zero we don't need to do anything        $str = $input;    }    return $str;}/** * Encryption using blowfish algorithm * * @param   string  original data * @param   string  the secret * * @return  string  the encrypted result * * @access  public * * @author  lem9 */function PMA_blowfish_encrypt($data, $secret) {    $pma_cipher = new Horde_Cipher_blowfish;    $encrypt = '';    for ($i=0; $i<strlen($data); $i+=8) {        $block = substr($data, $i, 8);        if (strlen($block) < 8) {            $block = full_str_pad($block, 8, "\0", 1);        }        $encrypt .= $pma_cipher->encryptBlock($block, $secret);    }    return base64_encode($encrypt);}/** * Decryption using blowfish algorithm * * @param   string  encrypted data * @param   string  the secret * * @return  string  original data * * @access  public * * @author  lem9 */function PMA_blowfish_decrypt($encdata, $secret) {    $pma_cipher = new Horde_Cipher_blowfish;    $decrypt = '';    $data = base64_decode($encdata);    for ($i=0; $i<strlen($data); $i+=8) {        $decrypt .= $pma_cipher->decryptBlock(substr($data, $i, 8), $secret);    }    return trim($decrypt);}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -