如何写一个像btgoogle一样的12306泄露数据查询
2014-12-26 22:39
369 查看
demo地址:http://www.btgoogle.com/12306/
圣诞节,12306送给了我们一个大礼物。大约 14w的数据泄露, 看网上都沸沸扬扬的。开始也准备找一个数据库来看看,随后,我 得到了 一份 数据 大约 14M 也就是
143,863 个数据
.文件泄露的是 txt 格式的文件。 当群里有人也得到了这份数据。准备做一个 12306泄露的数据库做一个网站。提供他人查询自己是否在此次泄露信息的名单中。
信息是这种形式的
当时群里,有人开始比速度,程序员都好面子~~~
有人说 5分钟搞定。 过了 差不多 5-10分钟 。确实搞定了。
他的方法是 利用正则匹配 本地文件,然后网站内 通过get 获取email 然后正则匹配到 输出 已泄露。
呵呵 ,呵呵 ,这样确实是把这个处理掉了。这是比的速度。
但是 ,我们还是一步一步的处理数据然后入库,随后查询吧。一共是 14w多数据,开始还考虑使用 sphinx ,显然是没有必要的。
速度不错 。开始准备在这个下面用
order by rand() limit 50
获取 随机的 50个用户的信息。使用 这段语句每执行一次 需要 6秒多,确实很耗时间,随后,网站也崩溃了一段时间。
下面是 遇到同样困扰的处理。
*****************************************************************
sql order by rand随机数据优化与性能对比
来自:http://www.111cn.net/database/mysql/53036.htm
最初使用的是 order by rand()了,发现几万条数据居然要10秒之长的时间很是悲剧吧
显示行 0 - 29 (154,825 总计, 查询花费 10.1125 秒)
后来网上搜索到如下方法,同样数据感觉有很大的提高了(这里测试的是15W数据)
显示行 0 - 29 (154,825 总计, 查询花费 0.0221 秒)
感觉不错了,有朋友说用join可能更好,于时找了一段代码测试一下查询花费 0.0025 秒,又提供了几倍呀。
显示行 0 - 9 (10 总计, 查询花费 0.0025 秒)
最后还可以优化一下
显示行 0 - 9 (10 总计, 查询花费 0.0008 秒)
总结一下,我们如果用同样的方法在字段选择时越少越好,这不从0.0025直接降到0.0008秒了哦。
*****************************************************************************************************
后面把这一部分使用了 html 静态的了。
随后你需要处理这个文件,处理到数据库中,这里我用的是mysql 。对于字符串的处理,直接用编辑器 自带的正则匹配掉就行了 。
———— 很容易发现很多 这种形式 直接全部替换成 ‘,’ 这种形式,每个前面 后面也需要添加相应的字符。^ 匹配开头 $ 匹配结尾。
存储了数据 后面就是直接 使用php 前端直接查询输出了。
下面是关键代码。
demo地址:http://www.btgoogle.com/12306/
圣诞节,12306送给了我们一个大礼物。大约 14w的数据泄露, 看网上都沸沸扬扬的。开始也准备找一个数据库来看看,随后,我 得到了 一份 数据 大约 14M 也就是
143,863 个数据
.文件泄露的是 txt 格式的文件。 当群里有人也得到了这份数据。准备做一个 12306泄露的数据库做一个网站。提供他人查询自己是否在此次泄露信息的名单中。
信息是这种形式的
当时群里,有人开始比速度,程序员都好面子~~~
有人说 5分钟搞定。 过了 差不多 5-10分钟 。确实搞定了。
他的方法是 利用正则匹配 本地文件,然后网站内 通过get 获取email 然后正则匹配到 输出 已泄露。
1 <?php 2 3 $email = $_GET["email"]; 4 5 $L = preg_split("/\n/", file_get_contents("12.txt"); 6 7 foreach($L as $c) { 8 if (preg_match("/{$emaul}/", $c)) { 9 echo "已泄露"; 10 break; 11 } 12 }
呵呵 ,呵呵 ,这样确实是把这个处理掉了。这是比的速度。
但是 ,我们还是一步一步的处理数据然后入库,随后查询吧。一共是 14w多数据,开始还考虑使用 sphinx ,显然是没有必要的。
速度不错 。开始准备在这个下面用
order by rand() limit 50
获取 随机的 50个用户的信息。使用 这段语句每执行一次 需要 6秒多,确实很耗时间,随后,网站也崩溃了一段时间。
下面是 遇到同样困扰的处理。
*****************************************************************
sql order by rand随机数据优化与性能对比
来自:http://www.111cn.net/database/mysql/53036.htm
最初使用的是 order by rand()了,发现几万条数据居然要10秒之长的时间很是悲剧吧
代码如下 | 复制代码 |
SELECT * FROM `表名` order by rand() |
后来网上搜索到如下方法,同样数据感觉有很大的提高了(这里测试的是15W数据)
代码如下 | 复制代码 |
SELECT * FROM 表名 WHERE id >= ((SELECT MAX(id) FROM 表名)-(SELECT MIN(id) FROM 表名)) * RAND() + (SELECT MIN(id) FROM 表名) LIMIT 10 |
感觉不错了,有朋友说用join可能更好,于时找了一段代码测试一下查询花费 0.0025 秒,又提供了几倍呀。
代码如下 | 复制代码 |
SELECT * FROM 表名 AS t1 JOIN ( SELECT ROUND( RAND( ) * ( SELECT MAX( id ) FROM 表名 ) ) AS id ) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id ASC LIMIT 10 |
最后还可以优化一下
代码如下 | 复制代码 |
SELECT s_url,title FROM 表名 AS t1 JOIN ( SELECT ROUND( RAND( ) * ( SELECT MAX( id ) FROM 表名 ) ) AS id ) AS t2 WHERE t1.id >= t2.id and t1.z_type = $z_type ORDER BY t1.id asc LIMIT 10 |
总结一下,我们如果用同样的方法在字段选择时越少越好,这不从0.0025直接降到0.0008秒了哦。
*****************************************************************************************************
后面把这一部分使用了 html 静态的了。
随后你需要处理这个文件,处理到数据库中,这里我用的是mysql 。对于字符串的处理,直接用编辑器 自带的正则匹配掉就行了 。
———— 很容易发现很多 这种形式 直接全部替换成 ‘,’ 这种形式,每个前面 后面也需要添加相应的字符。^ 匹配开头 $ 匹配结尾。
存储了数据 后面就是直接 使用php 前端直接查询输出了。
下面是关键代码。
$email=$_GET['s']; $q = "SELECT * FROM `user` WHERE email='$email'"; $r = @mysqli_query($dbc, $q); echo '<h1>您邮箱搜索的结果:</h1>'; echo "<p>输入您的邮箱查看是否露出了您的数据</p>\n"; echo '<table align="center" cellspacing="3" cellpadding="3" width="75%"> <tr><td align="left"><b>邮箱</b></td><td align="left"><b>密码</b></td><td align="left"><b>身份证</b></td><td align="left"><b>用户名</b></td><td align="left"><b>手机号</b></td></tr> '; while ($row = @mysqli_fetch_array($r, MYSQLI_ASSOC)) { $emails=$row['email']; echo '<tr><td align="left">' . $row['email'] . '</td><td align="left">' .'***'.substr($row['password'],3) . '</td><td align="left">' .'*****'. substr($row["id_card"],5) . '</td><td align="left">' . $row["user"] . '</td><td align="left">' . '***'.substr($row["phone"],3) . '</td></tr> '; } if($emails==null){ echo '<h4 style="color:red">恭喜您!您的数据没有露出!把好运分享给你的好友吧!<h4>'; } else{echo '<h4 style="color:red">您的数据已经露出,请及时修改密码!分享给你的好友,看看他们有没有露出数据哦!<h4>';} echo '</table>'; // Close the table.
demo地址:http://www.btgoogle.com/12306/
相关文章推荐
- SQL中如何才能将查询的结果数据存在一个变量中???
- 如何和BT一样建立一个比较大的文件,然后再写入
- SqlServer 如何将查询出的多行数据拼成一个字符串返回
- mysql如何把查询到的数据加上一个自动编号字段
- Q:一个数据表中有大量数据,如何提高查询速度?
- oracle 如何固定查询一个时间段的数据
- 如何像Google一样玩转大数据
- 如何查询一个数据库表中某字段相同记录的数据
- 如何用SQL语句查询一个数据表所有字段的类型
- C# 如何将 不同的数据(多个查询结果集 dataset)导出到一个excel的不同sheet中
- 如何建立一个与现存数据库相同,但不包含数据的空库?
- 如何使用 ASP.NET查询和显示 Excel 数据
- 如何在写入一个long型的数据到文件?在线等。20分送!
- 如何在ACCESS中以时间为条件查询数据
- 如何取得一个数据表的所有列名
- 如何创建一个成功的数据仓库(data warehouse) (想了解数据仓库的人士快看)
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题(非原创,摘自书中)
- 如何编写一个能读取Powerbuilder的数据窗口中数据的程序
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题