标签:
这次泄露的是一个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)
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; } } }
配置文件 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>
数据不多,几秒钟就跑完了。。。 然后看一下数据库,额呵呵呵【阴险脸】。。。。
【用户分布】
话说,之前看到有分析说这不是一次泄露而是”撞库“,我个人觉得,从数据来看不像是“撞库”。比如,用户年龄分布,如下图:
根据身份证体现的出生年份来看,的确80,90用户很集中,但是各年龄段也是自然分布,之前泄露过数据的网站,如CSDN,人人等都有很突出且集中的用户分布。
【吐槽】谈到年龄嘛,库里有个2014年3月出生的姓高的宝宝,你家人抢票真的很激烈,你还不满一岁就成马甲了,也是醉了有木有!
再来看看星座,可以说攻受立判(划掉),咳,此处不加评判仅供参考。然后,哪个省的人爱到处跑呢?
下班了,未完待续...
标签:
原文地址:http://www.cnblogs.com/hydor/p/4187296.html