+ -
当前位置:首页 → 问答吧 → 一个不错的PHP加密类

一个不错的PHP加密类

时间:2010-01-01

来源:互联网

引用


<?php      
/* XXTEA encryption arithmetic library.    
*    
* Copyright (C) 2006 Ma Bingyao <[email protected]>    
* Version:      1.5    
* LastModified: Dec 5, 2006    
* This library is free.  You can redistribute it and/or modify it.    
*/     
     
class xxtea {      
    function long2str($v, $w) {      
        $len = count($v);      
        $n = ($len - 1) << 2;      
        if ($w) {      
            $m = $v[$len - 1];      
            if (($m < $n - 3) || ($m > $n)) return false;      
            $n = $m;      
        }      
        $s = array();      
        for ($i = 0; $i < $len; $i++) {      
            $s[$i] = pack("V", $v[$i]);      
        }      
        if ($w) {      
            return substr(join('', $s), 0, $n);      
        }      
        else {      
            return join('', $s);      
        }      
    }      
     
    function str2long($s, $w) {      
        $v = unpack("V*", $s. str_repeat("\0", (4 - strlen($s) % 4) & 3));      
        $v = array_values($v);      
        if ($w) {      
            $v[count($v)] = strlen($s);      
        }      
        return $v;      
    }      
            
    function xxtea_encrypt($str, $key) {       
        if ($str == "") {       
            return "";       
        }       
        $v = $this->str2long($str, true);       
        $k = $this->str2long($key, false);      
        $max=count($k);      
        $i=0;      
        $j=0;      
        while(isset($v[$i]))      
        {      
            if($v[$i]==0)      
            {      
                $i++;      
                continue;      
            }      
            $v[$i]  =   $v[$i] ^ $k[$j];      
            $i++;      
            $j++;      
            if($j==$max)      
            {      
                $i--;      
                $v[$i]  =   $v[$i]  ^   $i;      
                $i++;      
                $j=0;      
            }      
        }      
     
        return $this->long2str($v, false);       
    }       
            
    function xxtea_decrypt($str, $key) {       
        if ($str == "") {       
            return "";       
        }       
        $v = $this->str2long($str, false);       
        $k = $this->str2long($key, false);       
        $max=count($k);      
        $i=0;      
        $j=0;      
        while(isset($v[$i]))      
        {      
            if($v[$i]==0)      
            {      
                $i++;      
                continue;      
            }      
            $v[$i]  =   $v[$i] ^ $k[$j];      
            $i++;      
            $j++;      
            if($j==$max)      
            {      
                $i--;      
                $j--;      
                $v[$i]  =   $v[$i] ^ $k[$j];      
                $v[$i]  =   $v[$i] ^ $i;      
                $v[$i]  =   $v[$i] ^ $k[$j];      
                $i++;      
                $j=0;      
            }      
        }      
        return $this->long2str($v, true);       
    }       
     



作者: 我要公仔   发布时间: 2010-01-01

$n = ($len - 1) << 2;  
是什么意思,就是“<<”看不懂。

作者: level_level   发布时间: 2010-01-01

怎么使用,最好搞个例子看看

作者: xfxuxin   发布时间: 2010-01-01

XXTEA加密算法。。。。。额。。很古老的一中

作者: cain   发布时间: 2010-01-01