blowfish.php

来自「phpMyAdmin图形界面化操作,我已经配置好了,只要把解要压缩后的文件放到站」· PHP 代码 · 共 523 行 · 第 1/2 页

PHP
523
字号
            0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,            0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,            0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,            0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,            0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,            0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,            0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,            0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,            0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,            0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,            0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,            0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,            0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,            0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,            0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,            0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,            0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,            0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,            0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,            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;    /**     * 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'];        }    }    /**     * 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:/** * 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 = '';        $mod = strlen($data) % 8;        if ($mod > 0) {        $data .= str_repeat("\0", 8 - $mod);    }        foreach (str_split($data, 8) as $chunk) {        $encrypt .= $pma_cipher->encryptBlock($chunk, $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);        foreach (str_split($data, 8) as $chunk) {        $decrypt .= $pma_cipher->decryptBlock($chunk, $secret);    }    return trim($decrypt);}?>

⌨️ 快捷键说明

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