blowfish.php

来自「php绿色服务器,让大家试用greenamp」· PHP 代码 · 共 472 行 · 第 1/2 页

PHP
472
字号
            0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,            0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,            0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,            0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,            0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,            0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,            0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,            0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,            0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,            0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,            0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,            0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,            0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,            0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,            0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,            0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,            0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,            0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,            0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,            0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,            0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,            0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,            0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,            0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,            0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,            0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,            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;    /* 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);        }        list($L, $R) = array_values(unpack('N*', $block));        $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));    }}?>

⌨️ 快捷键说明

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