Graent.Hu 的博客

新浪微薄腾讯微薄

最新碎语:最近感觉有些迷茫,怎么办~

您的位置:Graent.Hu 的博客 >PHP编程> 可逆对称加密算法

可逆对称加密算法

/**
 * 加密解密函数
 */
// edauth高效可逆随机加密函数参数解释 
#------------------------------------------------------------------------#
# $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);
	$key = $key != '' ? $key : substr(md5(C('AUTH_KEY').C('sitekey')),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 '';
        }
    }
}

我的微信:graent_hu

欢迎扫码加我和微信好友,有什么问题我们可以一起探讨,有什么需要也随时欢迎发消息给我~

转载请注明出处:

本文标题:可逆对称加密算法

本文链接:https://www.wlyc.cn/post-2.html

发表评论

路人甲 表情
看不清楚?点图切换