`
hudeyong926
  • 浏览: 2034828 次
  • 来自: 武汉
社区版块
存档分类
最新评论

PHP开源加密解密库(带超时)

阅读更多

phpseclib 是一组PHP语言实现的用于进行DES, 3DES, RC2, RC4, Rijndael, Twofish,Blowfish,AES, SSH-1和 SSH-2,非对称密钥算法RSA 等标准的实现,兼容JAVA,.NET等 http://phpseclib.sourceforge.net/documentation/

http://phpseclib.sourceforge.net/index.html

此函数的厉害之处在于可以在指定时间内加密还原字符串,超时无法还原。即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。这样我们就可以拿此函数来做很多用途了,比如:单点登录的token加密传输啦,临时密码 ,找回密码链接 等等。

在这里记录一下,方便以后应用。

<?php
/**
 * @param string $string 原文或者密文
 * @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE
 * @param string $key 密钥
 * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效
 * @return string 处理后的 原文或者 经过 base64_encode 处理后的密文
 *
 * @example authcode(serialize(array('mail' => $data['mail'])), 'ENCODE', APPKEY);
 *
 *  $a = authcode('abc', 'ENCODE', 'key');
 *  $b = authcode($a, 'DECODE', 'key');  // $b(abc)
 *
 *  $a = authcode('abc', 'ENCODE', 'key', 3600);
 *  $b = authcode('abc', 'DECODE', 'key'); // 在一个小时内,$b(abc),否则 $b 为空
 */
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 3600) {
    $ckey_length = 4;
    // 随机密钥长度 取值 0-32;
    // 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。
    // 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方
    // 当此值为 0 时,则不产生随机密钥
    if ($operation == 'DECODE') {
        $string = str_replace('[a]', '+', $string);
        $string = str_replace('[b]', '&', $string);
        $string = str_replace('[c]', '/', $string);
    }
    $key = md5($key ? $key : 'KEY');
    $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 {
        $ustr = $keyc . str_replace('=', '', base64_encode($result));
        $ustr = str_replace('+', '[a]', $ustr);
        $ustr = str_replace('&', '[b]', $ustr);
        $ustr = str_replace('/', '[c]', $ustr);
        return $ustr;
    }
}
分享到:
评论

相关推荐

    java开源包6

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包9

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包8

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包10

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包1

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包2

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包3

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包5

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包11

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包7

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包4

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包101

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    易语言-易语言与PHP加密通讯协议

    在易语言端,开发者可能会使用到如`socket`库来创建网络连接,`send`和`recv`函数进行数据发送和接收,以及一些加密库如`openssl`来进行数据加密解密。而在PHP端,同样会使用`socket`类建立连接,`fwrite`和`fread`...

    PHP-Source-Query-master_importantqgs_MasterClass_PHP-Source-Quer

    【PHP-Source-Query-master_importantqgs_MasterClass_PHP-Source-Quer】是一个与游戏查询相关的PHP...同时,这个项目可能依赖其他PHP扩展或类库,如socket通信、加密解密等,安装和配置这些依赖也是使用前的必要步骤。

    commons-dbcp-1.2.2-src.zip

    Apache Commons DBCP,全称为“Database Connection Pool”,是一个开源的Java数据库连接池组件,源自Apache Commons项目。这个组件在Java应用开发中扮演着重要的角色,特别是在构建基于JDBC的应用时,它提供了一种...

    SpringBoot-mybaits-druid-swagger

    **Druid** 是阿里巴巴开源的一个数据库连接池实现,它包含了一个强大的监控功能。Druid能够提供SQL解析、执行计划展示、连接池诊断、性能分析等功能,是Spring Boot项目中常用的数据库连接池选择。 **Swagger** 是...

    libcurl+openssl静态库(windows下)

    openssl库提供了加密、解密、证书管理等功能,使得libcurl能够处理HTTPS连接。 在Windows环境下编译libcurl和openssl的静态库,需要以下步骤: 1. 下载源代码:从官方网站获取libcurl和openssl的最新源码包。 2. ...

    arm64-v8a三件套libcrypto.a\libcurl.a\libssl.a,人人为我,我为人人!

    libcrypto.a是OpenSSL库的一部分,它是世界上最广泛使用的开源加密库之一。这个库提供了各种加密算法,包括但不限于对称加密(如AES)、非对称加密(如RSA和DSA)、哈希函数(如MD5和SHA)以及随机数生成。在Android...

    wolfSSL参考手册

    wolfSSL是一个开源的SSL库,支持多种加密算法,包括但不限于AES、RSA、ECC等。该参考手册主要提供了对wolfSSL库的功能介绍、配置方法、编程接口以及使用示例等,旨在帮助开发者理解并使用wolfSSL进行安全通信开发。 ...

    Masuit.Tools:一个常用的操作类的类库,汇集了加密解密,反射操作,硬件信息,字符串扩展方法,日期时间扩展操作,大文件拷贝,图像裁剪,验证码等功能,喜欢就给Star吧

    包含一些常用的操作类,大都是静态类,加密解密,反射操作,动态编译,权重随机筛选算法,简繁转换,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展...

Global site tag (gtag.js) - Google Analytics