• 存储qq的文件地址以及按照密码相似度排序的文件地址

     //存储qq的文件的地址
    char path[] = "QQ.txt";
    //按照密码相似度排序的文件地址
    char pathsortbypass[] = "QQpasswordsort.txt";
  • 标识qq一共有多少行
     //文件一共有多少行
    #define N 84331446
  • 创建结构体存储密码,并把文件载入内存
     //密码信息
    struct info
    {
    char str[];
    }; //指向所有结构体的指针
    struct info *pall = NULL;
     //初始化
    void init()
    {
    //记录时间
    time_t start, end;
    time(&start); pall = calloc(N, sizeof(struct info));//分配内存
    if (pall==NULL)
    {
    puts("calloc fail");
    return;
    }
    //打开文件
    FILE *pf = fopen(path, "r"); //依次读取
    for (int i = ; i <N; i++)
    {
    char str[] = { };
    fgets(str, , pf);
    char *pfind = strstr(str, "----");
    //每行格式123----qweqe
    if (pfind !=NULL)
    {
    int length = strlen(pfind + );
    //刷掉非法密码
    if (length<)
    {
    //拷贝字符串
    strcpy(pall[i].str, pfind + );
    }
    }
    }
    //关闭文件
    fclose(pf);
    time(&end);
    printf("文件读取话费%f秒\n", difftime(end, start));
    }
  • 按照相似度快速排序
     //快速排序比较函数,比较两个结构体
    int com(void *p1, void *p2)
    {
    struct info *pinfo1 = p1;
    struct info *pinfo2= p2;
    return strcmp(pinfo1->str, pinfo2->str);//排序的函数
    } //排序
    void sort()
    {
    //记录时间
    time_t start, end;
    time(&start); //快速排序
    qsort(pall, N, sizeof(struct info), com); time(&end);
    printf("排序话费%f秒\n", difftime(end, start));
    }
  • 写入文件
     //写入文件
    void writetofile()
    {
    //存储时间
    time_t start, end;
    //开始时间
    time(&start);
    //以写的方式打开文件
    FILE *pf = fopen(pathsortbypass, "w");
    //判断每一个
    for (int i = ; i < N; i++)
    {
    //格式 5----pass
    char allstr[] = { };
    //存储密码
    char istr[] = { };
    strcpy(istr, pall[i].str);//拷贝备份 int j = ;//出现一次
    //循环直到最后一个不相等
    while (strcmp(pall[i].str,pall[i+].str)==)
    {
    i++;//循环前进
    j++;//计数
    }
    //合成字符串写入
    sprintf(allstr, "%d----%s", j, istr);
    //写入到文件
    fputs(allstr, pf);
    } //关闭文件
    fclose(pf); //结束
    time(&end); printf("排序花费%f秒\n", difftime(end, start));
    }
  • 获取文件有多少行
     //获取文件有多少行
    int getN(char *path)
    {
    int i = ;
    FILE *pf = fopen(path, "r");
    if (pf==NULL)
    {
    return -;
    }
    else
    {
    while (!feof(pf))
    {
    char str[] = { };
    fgets(str, , pf);
    i++;
    } fclose(pf);
    return i;
    }
    }
  • 主函数
     //主函数
    void main()
    {
    //初始化载入到内存
    init();
    //密码相似度排序
    sort();
    //写入文件
    writetofile();
    system("pause");
    }

完整代码

 #define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h> //存储qq的文件的地址
char path[] = "QQ.txt";
//按照密码相似度排序的文件地址
char pathsortbypass[] = "QQpasswordsort.txt";
//文件一共有多少行
#define N 84331446 //密码信息
struct info
{
char str[];
}; //指向所有结构体的指针
struct info *pall = NULL; //写入文件
void writetofile()
{
//存储时间
time_t start, end;
//开始时间
time(&start);
//以写的方式打开文件
FILE *pf = fopen(pathsortbypass, "w");
//判断每一个
for (int i = ; i < N; i++)
{
//格式 5----pass
char allstr[] = { };
//存储密码
char istr[] = { };
strcpy(istr, pall[i].str);//拷贝备份 int j = ;//出现一次
//循环直到最后一个不相等
while (strcmp(pall[i].str,pall[i+].str)==)
{
i++;//循环前进
j++;//计数
}
//合成字符串写入
sprintf(allstr, "%d----%s", j, istr);
//写入到文件
fputs(allstr, pf);
} //关闭文件
fclose(pf); //结束
time(&end); printf("排序花费%f秒\n", difftime(end, start));
} //快速排序比较函数,比较两个结构体
int com(void *p1, void *p2)
{
struct info *pinfo1 = p1;
struct info *pinfo2= p2;
return strcmp(pinfo1->str, pinfo2->str);//排序的函数
} //排序
void sort()
{
//记录时间
time_t start, end;
time(&start); //快速排序
qsort(pall, N, sizeof(struct info), com); time(&end);
printf("排序话费%f秒\n", difftime(end, start));
} //初始化
void init()
{
//记录时间
time_t start, end;
time(&start); pall = calloc(N, sizeof(struct info));//分配内存
if (pall==NULL)
{
puts("calloc fail");
return;
}
//打开文件
FILE *pf = fopen(path, "r"); //依次读取
for (int i = ; i <N; i++)
{
char str[] = { };
fgets(str, , pf);
char *pfind = strstr(str, "----");
//每行格式123----qweqe
if (pfind !=NULL)
{
int length = strlen(pfind + );
//刷掉非法密码
if (length<)
{
//拷贝字符串
strcpy(pall[i].str, pfind + );
}
}
}
//关闭文件
fclose(pf);
time(&end);
printf("文件读取话费%f秒\n", difftime(end, start));
} //获取文件有多少行
int getN(char *path)
{
int i = ;
FILE *pf = fopen(path, "r");
if (pf==NULL)
{
return -;
}
else
{
while (!feof(pf))
{
char str[] = { };
fgets(str, , pf);
i++;
} fclose(pf);
return i;
}
} //主函数
void main()
{
//初始化载入到内存
init();
//密码相似度排序
sort();
//写入文件
writetofile();
system("pause");
}

86.八千万qq密码按相似度排序并统计密码出现次数,生成密码库的更多相关文章

  1. 72.挖掘CSDN密码到链表并统计密码出现次数生成密码库

    list.h #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include & ...

  2. Linux是对用户的密码的复杂度要求设置【转】

    那么Linux是如何实现对用户的密码的复杂度的检查的呢?其实系统对密码的控制是有两部分组成: 1 cracklib 2 /etc/login.defs pam_cracklib.so 才是控制密码复杂 ...

  3. Linux下随机生成密码的命令总结

    有时候经常为如何设置一个安全.符合密码复杂度的密码而绞尽脑汁,说实话,这实在是一个体力活而且浪费时间,更重要的是设置密码的时候经常纠结.终于有一天实在忍不住了,于是学习.整理了一下如何使用Linux下 ...

  4. five86-1 (OpenNetadmin RCE+cp命令提权+crunch生成密码字典)

    Vulnhub-Five86-1 实验环境 kali攻击机ip:192.168.56.116 Five86-1靶机ip:192.168.56.121 知识点及工具 nmap扫描 john爆破 Open ...

  5. 忘记常访问网站密码怎么办?教你如何查看浏览器已保存的密码,如何简单查看Chome浏览器保存的密码?

    利用场景: 同事或朋友外出有事,电脑未锁屏离开座位.可以利用这一间隙,查看Ta在Chrome浏览器上保存的账号密码 查看逻辑: 当我们要查看Chrome浏览器上保存的密码时,点击显示,会弹出一个对话框 ...

  6. 混合使用 ForkJoin, Akka, Future 实现一千万个不重复整数的排序

    定位  本文适合于想要了解新语言 Scala 以及异步并发编程框架 Akka, Future 的筒鞋. 读完本文后,将了解如何使用 ForkJoin 框架.如何使用 Akka 构建并发程序.如何使用 ...

  7. MySQL忘记了密码登录不进去,用命令符修改新的密码重新登录的方法

    MySQL忘记了密码登录不进去,用命令符修改新的密码重新登录的方法: 1.备份my.ini 2.在my.ini字段里 [mysqld] #socket=mysql skip-grant-tables ...

  8. 利用itertools生成密码字典,多线程撞库破解rar压缩文件密码

    脚本功能: 利用itertools生成密码字典(迭代器形式) 多线程并发从密码字典中取出密码进行验证 验证成功后把密码写入文件中保存 #!/usr/bin/env python # -*- codin ...

  9. 混合使用ForkJoin+Actor+Future实现一千万个不重复整数的排序(Scala示例)

    目标       实现一千万个不重复整数的排序,可以一次性加载到 2G 的内存里. 本文适合于想要了解新语言 Scala 并发异步编程框架 Akka, Future 的筒鞋. 读完本文后,将了解如何综 ...

随机推荐

  1. linux安装lrzsz支持rz从windows上传文件到linux

    1.下载lrzsz wget https://wangxuejin-data-1252194948.cos.ap-shanghai.myqcloud.com/lrzsz-0.12.20.tar.gz ...

  2. mkdi---创建目录。

    mkdir命令用来创建目录.该命令创建由dirname命名的目录.如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录:如果给出了一个已经存在的路径,将会在该目录下创建一个 ...

  3. 超好用的谷歌浏览器、Sublime Text、Phpstorm、油猴插件合集

    原文:超好用的谷歌浏览器.Sublime Text.Phpstorm.油猴插件合集 - 『精品软件区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.c ...

  4. Android的SQLite的增删查改

    原创作品,允许转载,转载时请务必声明作者信息和本声明.http://www.cnblogs.com/zhu520/p/8343675.html 本人小白,那个大神看到有问题可指出,谢谢.... 一:s ...

  5. jQuery和JavaScript的点击事件区别

    // $("#indexPage").click(); // 触发了a标签的点击事件,但是没有触发页面跳转 document.getElementById("indexP ...

  6. 大型情感类电视连续剧--Android高德之旅(2)地图类型

    总要说两句 今天继续我们的Android高德之旅,上一篇已经能够显示最主要的地图了.有主要的放大缩小功能.还有最后做的点击3D旋转.倾斜视角的效果.今天这篇文章来记录一下高德地图的5种地图类型. (其 ...

  7. 63.note.js之 Mongodb在Nodejs上的配置及session会话机制的实现

    转自:https://www.cnblogs.com/alvin_xp/p/4751784.html 1.第一步安装mongodb数据库,这直接官网下载,这里不介绍. 2.也可以使用npm实现直接下载 ...

  8. Android自定义组件系列【13】——Android自定义对话框如此简单

    在我们的日常项目中很多地方会用到对话框,但是Android系统为我们提供的对话框样子和我们精心设计的界面很不协调,在这种情况下我们想很自由的定义对话框,或者有的时候我们的对话框是一个图片,没有标题和按 ...

  9. OpenStack安装及监控配置视频教程

    OpenStack是一个美国国家航空航天局和Rackspace合作研发的云端运算软件,是一个自由软件和开放源代码项目,用来建立公共和私有云本,其软件使用比较复杂,本视频将讲解其安装和部分配置方法,以后 ...

  10. Kinect 开发 —— 图片浏览

    总体思路 首先运用WPF编写一个简单的支持多点触控的图片浏览程序,这方面您可以参看MSDN上的这篇文章,上面有代码,可能需要FQ才能下载.中文的话,您可以参考Gnie同学关于在WPF上面多点触屏(Mu ...