php_edauth高效可逆随机加密函数

// edauth高效可逆随机加密函数参数解释 
// author: PGCao(排骨曹) 
#------------------------------------------------------------------------#
# $string: 明文 或 密文
# $operation:true表示加密,false表示解密
# $key: 密匙
# $outtime:密文有效期, 单位为秒
# $entype:加密方式 有md5和sha1两种 加密解密需要统一使用同一种方式才能正确还原明文
function edauth($string, $operation = true, $key = '', $outtime = 0, $entype = 'md5') {
    $key_length = 4;
    if ($entype == 'md5') { //使用md5方式
        $long_len = 32;
        $half_len = 16;
        $entype == 'md5';
    } else { //使用sha1方式
        $long_len = 40;
        $half_len = 20;
        $entype == 'sha1';
    }
    $key = $key != '' ? $key : substr(md5($_SERVER['DOCUMENT_ROOT'] . C('AUTH_KEY') . $_SERVER['REMOTE_ADDR']), 0, 30);
    $fixedKey = hash($entype, $key);
    $egiskeys = md5(substr($fixedKey, $half_len, $half_len));
    $runtoKey = $key_length ? ($operation ? substr(hash($entype, microtime(true)), -$key_length) : substr($string, 0, $key_length)) : '';
    $keys = hash($entype, substr($runtoKey, 0, $half_len) . substr($fixedKey, 0, $half_len) . substr($runtoKey, $half_len) . substr($fixedKey, $half_len));
    $string = $operation ? sprintf('%010d', $outtime ? $outtime + time() : 0) . substr(md5($string . $egiskeys), 0, $half_len) . $string : base64_decode(substr($string, $key_length));
    $i = 0;
    $result = '';
    $string_length = strlen($string);
    for ($i = 0; $i < $string_length; $i++) {
        $result .= chr(ord($string{$i}) ^ ord($keys{$i % $long_len}));
    }
    if ($operation) {
        return $runtoKey . str_replace('=', '', base64_encode($result));
    } else {
        if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, $half_len) == substr(md5(substr($result, $half_len + 10) . $egiskeys), 0, $half_len)) {
            return substr($result, $half_len + 10);
        } else {
            return '';
        }
    }
}


来自:http://www.thinkphp.cn/code/602.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值