分享一个加密解密函数

浏览:5417 发布日期:2014/06/11 分类:技术分享 关键字: 加密 解密
这个函数看得我好晕啊!脑细胞都死了好 多了!所以发上来送给大家!/**
 * Discuz 加密/解密
 *
 * @param [type]  $string    [description]
 * @param string  $operation [description]
 * @param string  $key       [description]
 * @param integer $expiry    [description]
 * @return [type]            [description]
 */
function authcode( $string, $operation = 'DECODE', $key = '', $expiry = 0 ) {
    $ckey_length = 4;
    $key = md5( $key != '' ? $key : C( 'AUTH_CODE' ) );
    $keya = md5( substr( $key, 0, 16 ) );
    $keyb = md5( substr( $key, 16, 16 ) );
    $keyc = $ckey_length ? ( $operation == 'DECODE' ? substr( $string, 0, $ckey_length ): substr( md5( microtime() ), -$ckey_length ) ) : '';

    $cryptkey = $keya.md5( $keya.$keyc );
    $key_length = strlen( $cryptkey );

    $string = $operation == 'DECODE' ? base64_decode( substr( $string, $ckey_length ) ) : sprintf( '%010d', $expiry ? $expiry + time() : 0 ).substr( md5( $string.$keyb ), 0, 16 ).$string;
    $string_length = strlen( $string );

    $result = '';
    $box = range( 0, 255 );

    $rndkey = array();
    for ( $i = 0; $i <= 255; $i++ ) {
        $rndkey[$i] = ord( $cryptkey[$i % $key_length] );
    }

    for ( $j = $i = 0; $i < 256; $i++ ) {
        $j = ( $j + $box[$i] + $rndkey[$i] ) % 256;
        $tmp = $box[$i];
        $box[$i] = $box[$j];
        $box[$j] = $tmp;
    }

    for ( $a = $j = $i = 0; $i < $string_length; $i++ ) {
        $a = ( $a + 1 ) % 256;
        $j = ( $j + $box[$a] ) % 256;
        $tmp = $box[$a];
        $box[$a] = $box[$j];
        $box[$j] = $tmp;
        $result .= chr( ord( $string[$i] ) ^ ( $box[( $box[$a] + $box[$j] ) % 256] ) );
    }

    if ( $operation == 'DECODE' ) {
        if ( ( substr( $result, 0, 10 ) == 0 || substr( $result, 0, 10 ) - time() > 0 ) && substr( $result, 10, 16 ) == substr( md5( substr( $result, 26 ).$keyb ), 0, 16 ) ) {
            return substr( $result, 26 );
        } else {
            return '';
        }
    } else {
        return $keyc.str_replace( '=', '', base64_encode( $result ) );
    }
}
最佳答案
评论( 相关
后面还有条评论,点击查看>>