首页
给我留言
Search
1
精简Win10 ltsb 2016 企业长期服务版 10年的老电脑也能装
1,019 阅读
2
一个轻量级的文件编辑器Tiny File Manager(个人优化单文件版)
774 阅读
3
一款小巧的sqlite可视化管理工具
501 阅读
4
宝塔面板7.8.0最新跳过更新代码
489 阅读
5
小博客终于备案了
451 阅读
全部
经验
分享
源码
软件
日记
动漫
登录
Search
Moe
累计撰写
16
篇文章
累计收到
67
条评论
首页
栏目
全部
经验
分享
源码
软件
日记
动漫
页面
给我留言
搜索到
6
篇与
源码
的结果
2024-06-14
PHP discuz经典加密方法
记录一下 discuz经典加密方法 可实现每个密文不一样 但是解密结果一样 可设置密文有效期转自网络<?php header ( "Content-type:text/html;charset=UTF-8" ); $string="测试"; echo '<hr/>加密有效期10秒,密文内容:'; echo $string; $sss=authcode($string,'','',10); echo $sss; echo '<hr/>加密后解密内容:'; echo authcode($sss); // 参数解释 // $string: 明文 或 密文 // $operation:DECODE表示解密,其它表示加密 // $key: 密匙 // $expiry:密文有效期 function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙 $ckey_length = 4; // 密匙 $key = md5($key ? $key : $GLOBALS['discuz_auth_key']); // 密匙a会参与加解密 $keya = md5(substr($key, 0, 16)); // 密匙b会用来做数据完整性验证 $keyb = md5(substr($key, 16, 16)); // 密匙c用于变化生成的密文 $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; // 参与运算的密匙 $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b),解密时会通过这个密匙验证数据完整性 // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确 $string = $operation == 'DECODE' ? pack("H*",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') { // substr($result, 0, 10) == 0 验证数据有效性 // substr($result, 0, 10) - time() > 0 验证数据有效性 // substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16) 验证数据完整性 // 验证数据有效性,请看未加密明文的格式 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 { // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因 // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用bin2hex return $keyc.bin2hex($result); } }
2024年06月14日
33 阅读
0 评论
0 点赞
2022-07-01
一个轻量级的文件编辑器Tiny File Manager(个人优化单文件版)
简介最近宝塔面板会记录各种数据,为了不被监控隐私,决定换成LNMP,但是又不习惯没有宝塔面板的文件编辑器 LNMP则需要连接FTP下载到本地再修改 用起来比较麻烦。所以网上找到了这款文件编辑器《Tiny File Manager》用起来也十分方便,只要上传到服务器就能用了 可以在线修改代码。个人优化由于官方源码的Jqurey等cdn源是用jsdelivr、cloudflare、google 的源,所以国内用户访问非常慢,我将所有的CDN源都换成了国内的源,语言包删掉一些中国人用不到的语言,只保留了English、简体中文和繁体中文。保留一个单文件就能运行了。演示图后台默认密码后台默认账号密码: admin admin@123后台密码修改1.打开网站 https://tinyfilemanager.github.io/docs/pwd.html (官方的好像坏掉了,一直生成都是空白)或者去 https://c.runoob.com/compile/1/复制以下代码运行一下<?php echo password_hash('这里改成你的密码', PASSWORD_DEFAULT);得出密码哈希值(admin@123):$2y$10$8.MZKetH8W.sX0umHbLEoOWCIU0Oumo44UGkjQjGt0gwxhTVMqWLG 这段复制出来然后tfm.php找到27行:$auth_users = array( 'admin' => '这里替换你的密码哈希值', //admin@123 'user' => '$2y$10$Fg6Dz8oH9fPoZ2jJan5tZuv6Z4Kp7avtQ9bDfrdRntXtPeiMAZyGO' //12345 );下面用户user也修改一下保存就完事访问:http://你的域名/tfm.php 即可{message type="info" content="为了安全起见建议把tfm.php 改成你想要的名字"/}下载地址 tfm.php隐藏内容,请前往内页查看详情
2022年07月01日
774 阅读
40 评论
4 点赞
2021-09-02
PHP Sqlite3文档
最近用上了Sqlite,感觉挺轻量的 适合保存少量的数据 下面是数据库的操作文档:连接数据库:(PDO方式)<?php try { $pdo = new PDO("sqlite:database.db"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo "连接到数据库时发生错误: " . $e->getMessage(); }增:<?php $pdo->exec("INSERT INTO users (name) VALUES ('John')"); ?>删<?php $pdo->exec("DELETE FROM users WHERE id = 1"); ?>查:<?php $ret = $pdo->query("SELECT * FROM users"); //$row = $ret->fetch(PDO::FETCH_ASSOC); //$row['user']; while ($row = $ret->fetch(PDO::FETCH_ASSOC)) { echo "ID: " . $row['id'] . ", Name: " . $row['name'] . "<br>"; } ?>改:<?php $pdo->exec("UPDATE users SET name = 'Jane' WHERE id = 1"); ?>
2021年09月02日
330 阅读
1 评论
1 点赞
2021-08-03
此内容被密码保护
加密文章,请前往内页查看详情
2021年08月03日
47 阅读
0 评论
0 点赞
2021-06-23
记一次经常用到的PHP CURL获取页面函数 和 AJAX
CURL:function get_curl($url, $post = 0, $referer = 0, $cookie = 0, $header = 0, $ua = 0, $nobaody = 0) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $klsf[] = "Accept:*"; $klsf[] = "Accept-Encoding:gzip,deflate,sdch"; $klsf[] = "Accept-Language:zh-CN,zh;q=0.8"; curl_setopt($ch, CURLOPT_HTTPHEADER, $klsf); if ($post) { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); } if ($header) { curl_setopt($ch, CURLOPT_HEADER, TRUE); } if ($cookie) { curl_setopt($ch, CURLOPT_COOKIE, $cookie); } if ($referer) { if ($referer == 1) { curl_setopt($ch, CURLOPT_REFERER, "http://m.qzone.com/infocenter?g_f="); } else { curl_setopt($ch, CURLOPT_REFERER, $referer); } } if ($ua) { curl_setopt($ch, CURLOPT_USERAGENT, $ua); } else { curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Linux; U; Android 4.0.4; es-mx; HTC_One_X Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0'); } if ($nobaody) { curl_setopt($ch, CURLOPT_NOBODY, 1);//主要头部 //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);//跟随重定向 } curl_setopt($ch, CURLOPT_ENCODING, "gzip"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $ret = curl_exec($ch); curl_close($ch); return $ret; }AJAX:$.ajax({ type: "GET", dataType: "json", url: "api.php?", success: function (result) { //result; } }); }
2021年06月23日
387 阅读
1 评论
1 点赞
2021-06-16
宝塔面板7.8.0最新跳过更新代码
SSH登录ROOT运行:echo "{\"uid\":1000,\"username\":\"admin\",\"serverid\":1}" > /www/server/panel/data/userInfo.json清理浏览器缓存
2021年06月16日
489 阅读
1 评论
1 点赞