码迷,mamicode.com
首页 > 其他好文 > 详细

得到12306数据后,非技术性吐槽

时间:2014-12-26 18:36:36      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

这次泄露的是一个14M文件。有13.1W条精准无比的数据。

技术分享

 

想想还是很可怕的有木有,即使修改了密码,身份证号,手机号,邮箱,曾用密码也都暴漏出去了。

25号拿到数据的时候试着登录了几个(可没干什么坏事,不要抓我),100%正确率。。。。。。。太可怕了。。。。。。

 

 

为了更方便的统计,我写了个控制台程序,把数据导入数据库。

1、建表

技术分享
CREATE TABLE [dbo].[user12306](
    [email] [varchar](50) NULL,
    [password] [varchar](50) NULL,
    [realname] [nvarchar](50) NULL,
    [idcard] [char](20) NULL,
    [username] [varchar](20) NULL,
    [phone] [char](15) NULL,
    [email2] [varchar](50) NULL
View Code

 

2、控制台代码,我是用sqlbulkcopy插的DataTable,为了插入效率快。

技术分享
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Text;

namespace Import12306
{
    class Program
    {
        static void Main(string[] args)
        {

            var filePath = ConfigurationSettings.AppSettings["filePath"];
            var connStr = ConfigurationSettings.AppSettings["connStr"];
            var tableName = ConfigurationSettings.AppSettings["tableName"];
            var insertSize = int.Parse(ConfigurationSettings.AppSettings["insertSize"]);
            try
            {
                var sr = new StreamReader(filePath, Encoding.GetEncoding("gb2312")); //读文件
                string lineStr;
                var line = 1;
                var sqlbulkcopy = new SqlBulkCopy(connStr, SqlBulkCopyOptions.UseInternalTransaction);
                sqlbulkcopy.DestinationTableName = tableName;
                var newdt = GetNewTable();
                while ((lineStr = sr.ReadLine()) != null) //填充DataTable
                {
                    var ms = lineStr.Replace("----","|").Split(|);
                    var row = newdt.NewRow();
                    row["email"] = ms[0];
                    row["password"] = ms[1];
                    row["realname"] = ms[2];
                    row["idcard"] = ms[3];
                    row["username"] = ms[4];
                    row["phone"] = ms[5];
                    row["email2"] = ms[6];
                    newdt.Rows.Add(row);

                    if (line % insertSize == 0)
                    {
                        Console.WriteLine("正在写入第" + (line - insertSize) + "- " + line + "条数据," + DateTime.Now);
                        newdt.AcceptChanges();
                        sqlbulkcopy.WriteToServer(newdt);
                        Console.WriteLine("完成写入 ," + DateTime.Now);
                        newdt.Clear();
                    }
                    line++;

                } sr.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            Console.ReadLine();
        }

        private static DataTable GetNewTable()
        {

            #region 创建DataTable

            var readTxt = new DataTable("readTxt");

            var email = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "email" };
            readTxt.Columns.Add(email);

            var password = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "password" };
            readTxt.Columns.Add(password);

            var realname = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "realname" };
            readTxt.Columns.Add(realname);

            var idcard = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "idcard" };
            readTxt.Columns.Add(idcard);

            var username = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "username" };
            readTxt.Columns.Add(username);

            var phone = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "phone" };
            readTxt.Columns.Add(phone);

            var email2 = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "email2" };
            readTxt.Columns.Add(email2);

            #endregion

            return readTxt;

        }
    }
}
View Code

 

配置文件 App.config

技术分享
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    
    <add key="connectionStr" value="Data Source=.\BU;Initial Catalog=ac12306;User Id=UserID;Password=Password;" />
    <add key="filePath" value="e:\\12306.txt" /><!--文件路径-->
    <add key="tableName" value="usersss" /><!--数据库表名-->
    <add key="insertSize" value="1000" /><!--每批次插入数量-->

  </appSettings>
</configuration>
View Code

 


数据不多,几秒钟就跑完了。。。 然后看一下数据库,额呵呵呵【阴险脸】。。。。

 

【用户分布】

话说,之前看到有分析说这不是一次泄露而是”撞库“,我个人觉得,从数据来看不像是“撞库”。比如,用户年龄分布,如下图:

技术分享

根据身份证体现的出生年份来看,的确80,90用户很集中,但是各年龄段也是自然分布,之前泄露过数据的网站,如CSDN,人人等都有很突出且集中的用户分布。

 

【吐槽】谈到年龄嘛,库里有个2014年3月出生的姓高的宝宝,你家人抢票真的很激烈,你还不满一岁就成马甲了,也是醉了有木有!

 

技术分享

 

再来看看星座,可以说攻受立判(划掉),咳,此处不加评判仅供参考。然后,哪个省的人爱到处跑呢?

技术分享

 

下班了,未完待续...

得到12306数据后,非技术性吐槽

标签:

原文地址:http://www.cnblogs.com/hydor/p/4187296.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!